最近刚开始做后台,有很多知识亟需补充。
几个平台要统一登录接口,由于投资方的系统使用CAS进行单点登录,我们也只能部署cas。架构师表示有很多比CAS更好的框架,比如openAM之类的。
结果从网上搜到的看起来貌似官方的教程略不靠谱,很多网站的教程还都是3.n的版本号,里面getticket时候需要com.noelios.restlet的包,尼玛至少4.0已经不需要这些包了,把它们配置进去是不科学的。
环境是win10 64bit
使用restful API只需要在服务端做以下几个动作:
一:下载源码(https://www.apereo.org/projects/cas/download-cas我选的是cas server 4.0.0,需要下的是source code:https://github.com/apereo/cas/archive/v4.0.0.zip),解压zip后在cas-4.0.0\cas-server-webapp\pom.xml中配置cas-server-integration-restlet
<dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-integration-restlet</artifactId> <version>${project.version}</version> <scope>compile</scope> </dependency> 或也可以 <!-- https://mvnrepository.com/artifact/org.jasig.cas/cas-server-integration-restlet --> <dependency> <groupId>org.jasig.cas</groupId> <artifactId>cas-server-integration-restlet</artifactId> <version>4.0.0</version> <type>jar</typee> </dependency>
二:编译
我特别傻缺地把源码导入了Eclipse,想要Eclipse自己编译顺便还能好好看看代码,结果Eclipse一直在校验,环境都挂了不知道多少回。然后同事说直接用maven自带命令去执行就好了。编译时候只需要编译webapp就可以了。
打开cmd,在cas-4.0.0\cas-server-webapp目录下执行mvn clean package即可,生成的文件在cas-4.0.0\cas-server-webapp\target下。
三:将编译好的cas.war部署到tomcat中,这个应该都会,就不赘述了。重点来了,配置webapps\cas\WEB-INF\web.xml。这里servlet-name是restlet,然后对应的配置已经存在于WEB-INF\restlet-servlet.xml中,两个名字是对应的,如果servlet-name是api,对应配置就是api-servlet.xml
<servlet> <servlet-name>restlet</servlet-name> <servlet-class>org.restlet.ext.spring.RestletFrameworkServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>restlet</servlet-name> <url-pattern>/v1/*</url-pattern> </servlet-mapping>
重启启动,我没有配https,直接调http://localhost:8090/cas/v1/tickets,如果结果如下图,就是部署restful成功了
用postman可以请求出结果,如下图
四:测试代码
代码参照了http://www.cnblogs.com/sunshineatnoon/p/4119565.html,不过她用的https,我用的http,强制转换的类不一样,大家各取所需了。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; public class CasTest { public static void main(String... args) throws Exception { String username = "casuser"; String password = "Mellon"; validateFromCAS(username, password); } public static boolean validateFromCAS(String username, String password) throws Exception { String url = "http://localhost:8090/cas/v1/tickets"; try { HttpURLConnection hsu = (HttpURLConnection) openConn(url); String s = URLEncoder.encode("username", "UTF-8") + "=" + URLEncoder.encode(username, "UTF-8"); s += "&" + URLEncoder.encode("password", "UTF-8") + "=" + URLEncoder.encode(password, "UTF-8"); System.out.println(s); OutputStreamWriter out = new OutputStreamWriter(hsu.getOutputStream()); BufferedWriter bwr = new BufferedWriter(out); bwr.write(s); bwr.flush(); bwr.close(); out.close(); String tgt = hsu.getHeaderField("location"); System.out.println(hsu.getResponseCode()); if (tgt != null && hsu.getResponseCode() == 201) { System.out.println(tgt); System.out.println("Tgt is : " + tgt.substring(tgt.lastIndexOf("/") + 1)); tgt = tgt.substring(tgt.lastIndexOf("/") + 1); bwr.close(); closeConn(hsu); String serviceURL = "http://localhost:8080/CasClient"; String encodedServiceURL = URLEncoder.encode("service", "utf-8") + "=" + URLEncoder.encode(serviceURL, "utf-8"); System.out.println("Service url is : " + encodedServiceURL); String myURL = url + "/" + tgt; System.out.println(myURL); hsu = (HttpURLConnection) openConn(myURL); out = new OutputStreamWriter(hsu.getOutputStream()); bwr = new BufferedWriter(out); bwr.write(encodedServiceURL); bwr.flush(); bwr.close(); out.close(); System.out.println("Response code is: " + hsu.getResponseCode()); BufferedReader isr = new BufferedReader(new InputStreamReader(hsu.getInputStream())); String line; System.out.println(hsu.getResponseCode()); while ((line = isr.readLine()) != null) { System.out.println(line); } isr.close(); hsu.disconnect(); return true; } else { return false; } } catch (MalformedURLException mue) { mue.printStackTrace(); throw mue; } catch (IOException ioe) { ioe.printStackTrace(); throw ioe; } } static URLConnection openConn(String urlk) throws MalformedURLException, IOException { URL url = new URL(urlk); HttpURLConnection hsu = (HttpURLConnection) url.openConnection(); hsu.setDoInput(true); hsu.setDoOutput(true); hsu.setRequestMethod("POST"); return hsu; } static void closeConn(HttpURLConnection c) { c.disconnect(); } }
里面用户名密码,子服务什么的,自己填入吧。
以上就没什么问题了:)
如果觉得文章好的话,鼓励一下吧:D
相关推荐
### CAS Restful接口调用详解 #### 一、CAS简介 CAS(Central Authentication Service)是一种开源的单点登录协议和服务实现。它旨在减轻单一Web应用的登录流程,并为多个服务提供一个集中式的认证机制。CAS支持...
"Java调用Restful API接口的方式" Java调用Restful API接口是Java开发中非常重要的一部分,了解Java调用Restful API接口的方式可以帮助开发者更好地理解和使用相关技术。本文将详细介绍Java调用Restful API接口的...
在本项目中,我们主要探讨的是如何利用Spring框架的4.0版本来构建RESTful Web服务并进行发布。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,使得客户端和服务器...
当前最新版本 cas-server-3.4.2 , cas-client-3.1.10 2. 安装 server l 解压 cas-server-3.4.2 ,将 cas-server-3.4.2\modules\cas-server-webapp-3.4.2.war 拷贝到 tomcat 的 webapps 下。 3. 配置 server ...
Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API前后端分离精讲第六章节Python Flask高级编程之RESTFul API...
在给定的文件中,我们有两个主要的部分:`cas-server-4.0.0-release` 和 `cas-client-3.2.1-release`,分别代表CAS服务器端的4.0.0版本和客户端的3.2.1版本。 **CAS服务器端4.0.0版本** CAS服务器是整个SSO系统的...
本篇文章将详细探讨.NET作为客户端调用WebAPI RESTful服务端的方法,以及如何开发RESTFUL服务端以供客户端调用。 首先,让我们了解一下客户端如何使用.NET调用WebAPI RESTful服务端。这通常涉及以下几个步骤: 1. ...
CAS 4.0 是 CAS 的一个较旧版本,但仍然被许多机构和组织使用。集成 RESTle 则是为了将 CAS 的功能扩展到RESTful API接口,使得非Web应用也能受益于CAS的安全认证。 RESTle(Representational State Transfer for ...
restful api访问k8s集群,增删改查信息。 需要预先创建访问权限的配置。 官网api文档 https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.9/ 下面罗列部分api curl -u admin:admin ...
本项目旨在介绍如何利用Python3、Django2.0框架、Django REST Framework(DRF)、CentOS7操作系统、uWSGI服务器以及Nginx反向代理来开发和部署RESTful API项目。 1. **Python3**:Python3是Python编程语言的最新...
本文将深入探讨如何使用C和C++来实现HTTP服务,并开发RESTful API服务器。 首先,HTTP(超文本传输协议)是互联网上应用最为广泛的一种网络协议,用于从万维网服务器传输超文本到本地浏览器。它是一个基于请求与...
在您提供的信息中,我们有两个版本的CAS服务器WAR包:cas-server-webapp-4.2.4-.war 和 cas-server-webapp-4.0.0.war。这两个文件是Java Web应用程序,可以部署在支持Servlet容器如Tomcat或Jetty上。 **CAS 4.2.4**...
SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验 本实验的主要目标是使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验。下面是实验的详细介绍: 标题...
本项目“基于tp5的restfulapi风格接口oauth20接口版本管理”旨在利用ThinkPHP5框架实现一个支持OAuth2.0授权协议的RESTful API,提供接口版本管理功能,这在现代Web服务和移动应用开发中至关重要。 首先,让我们...
《.NET 4.0 WebAPI开发指南:构建高效RESTful服务》 WebAPI是Microsoft为构建RESTful服务提供的一种框架,它允许开发者使用.NET Framework 4.0创建功能强大的HTTP服务。本教程将深入探讨如何利用.NET 4.0搭建WebAPI...
### RESTful API设计规范详解 #### 一、RESTful简介 RESTful是一种广泛应用于Web服务的设计风格,全称为Representational State Transfer(表述性状态转移)。它并非一项具体的技术标准,而是一系列设计原则和约束...
本文档将详细介绍如何使用 C# 创建和调用 RESTful 接口,包括 RESTful 的基本概念、如何构建 RESTful 风格的 API、服务端的具体实现步骤以及客户端如何调用服务端接口等内容。此外,还将提供详细的代码示例,以便...
Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask高级编程之RESTFul API前后端分离精讲Python Flask...
thinkphp6 RESTful API开发 开发过程记录笔记 https://blog.csdn.net/weixin_41120504/article/details/115638094