单点登陆(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只须要登陆一次就能够访问全部相互信任的应用系统。java
咱们目前的系统存在诸多子系统,而这些子系统是分别部署在不一样的服务器中,那么使用传统方式的session是没法解决的,咱们须要使用相关的单点登陆技术来解决。git
CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登陆方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具备如下特色:github
【1】开源的企业级单点登陆解决方案。web
【2】CAS Server 为须要独立部署的 Web 应用。spring
【3】CAS Client 支持很是多的客户端(这里指单点登陆系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。apache
从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 须要独立部署,主要负责对用户的认证工做;CAS Client 负责处理对客户端受保护资源的访问请求,须要登陆时,重定向到 CAS Server。下图是 CAS 最基本的协议过程:json
从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 须要独立部署,主要负责对用户的认证工做;CAS Client 负责处理对客户端受保护资源的访问请求,须要登陆时,重定向到 CAS Server 浏览器
SSO单点登陆访问流程主要有如下步骤:tomcat
1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。springboot
2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。
3. 用户认证:用户身份认证。
4. 发放票据:SSO服务器会产生一个随机的Service Ticket。
5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证经过后,容许客户端访问服务。
6. 传输用户信息:SSO服务器验证票据经过后,传输用户认证结果信息给客户端。
下载CAS 模板 Overlay Template,我这里使用 Apereo CAS 5.3.x 版本,JDK须要1.8+
地址:https://github.com/apereo/cas-overlay-template/tree/5.3
1. 解压下载的zip压缩包
2. 解压后使用maven命令打包
mvn package
3. 把target下生成的war包重命名为cas.war放到tomcat下
4. 启动tomcat
5. 找到解压的文件
因为CAS默认使用的是基于https协议,须要改成兼容使用http协议
到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes(这是个人目录,去你对应目录下找,不要找错啊,实在不行用everything搜索吧)目录的application,properties添加以下的内容
cas.tgc.secure=false cas.serviceRegistry.initFromJson=true
到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes\services目录下的HTTPSandIMAPS-10000001.json
修改内容以下,即添加http
"serviceId" : "^(https|http|imaps)://.*",
兼容http修改完毕,因为https协议默认使用的端口为8443,咱们修改成tomcat的8080端口
到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes目录的application,properties添加以下的内容
server.port=8080
因为默认的用户名和密码为casuser::Mellon很差记忆,
修改用户名和密码(根据须要修改为本身想要的)
到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes目录的application,properties的最后面修改密码为以下
cas.authn.accept.users=yyh::123456
CAS服务器搭建完毕,重启tomcat 进行测试,在浏览器中输入http://localhost:8080/cas/login或者http://localhost:8080/cas,
便可跳转到cas服务登陆界面,以下图:
输入帐号和密码,便可登入,以下图:
在浏览器输入http://localhost:8080/cas/logout便可退出服务,以下图:
接下来搭建springboot项目的客户端1
在新建的springboot项目的pom.xml添加以下依赖(匹配对应的版本)
<dependency> <groupId>net.unicon.cas</groupId> <artifactId>cas-client-autoconfig-support</artifactId> <version>2.1.0-GA</version> </dependency>
在resources下新建application.properties(或者application.yml)
server.port=8088 #cas服务端的地址 cas.server-url-prefix=http://localhost:8080/cas #cas服务端的登陆地址 cas.server-login-url=http://localhost:8080/cas/login #当前服务器的地址(客户端) cas.client-host-url=http://localhost:8088 #Ticket校验器使用Cas30ProxyReceivingTicketValidationFilter cas.validation-type=cas3
若是新建的是application.yml
server:
port: 8088
cas: server-url-prefix: http://localhost:8080/cas server-login-url: http://localhost:8080/cas/login client-host-url: http://localhost:8088 validation-type: cas3
在java下新建一个com.learn包,在包下新建一个Application 类,代码以下:
import net.unicon.cas.client.configuration.EnableCasClient; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
#启动CAS @EnableCasClient @EnableCasClient @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
在新建一个测试类CasTest1,代码以下:
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @EnableAutoConfiguration public class CasTest1 { @RequestMapping("/test1") public String test1(){ return "test1...."; } }
接下来搭建springboot项目的客户端2
方式同理,不一样的是在resources下新建application.properties(或者application.yml)的server.port的端口号进行修改,以下:
server.port=8090 #cas服务端的地址 cas.server-url-prefix=http://localhost:8080/cas #cas服务端的登陆地址 cas.server-login-url=http://localhost:8080/cas/login #当前服务器的地址(客户端) cas.client-host-url=http://localhost:8090 #Ticket校验器使用Cas30ProxyReceivingTicketValidationFilter cas.validation-type=cas3
客户端1,客户端2和cas服务器搭建好以后,接下来咱们进行测试:
1. 首先启动上面步骤中放置了cas的tomca服务器,进入D:\software\apache-tomcat-8.5.43\bin目录下,找到startup.bat,双击,便可启动。
2. 启动客户端1和客户端2,在浏览器中输入http://localhost:8088/test1
即跳转到cas登陆验证界面,以下图:
在不登陆的状况下,在浏览器另外一窗口输入客户端2,即在浏览器中输入http://localhost:8090/test2
一样,进入到了cas登陆验证界面,以下图:
当咱们在其中一个登陆界面登陆帐号后(假设登陆客户端2)就会跳转到登录后的界面,以下图:
咱们再次在浏览器窗口从新输入客户端1,http://localhost:8088/test1,或者在刚刚输入客户端页面从新刷新
不用登陆便可进入页面,以下图:
至此,整个单点登陆的测试就结束。
开通了CSDN,欢迎访问:http://www.javashuo.com/article/p-haywnbvy-ho.html