一、什么是单点登录单点登录Single Sign On简称为 SSO是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中用户只需要登录一次就可以访问所有相互信任的应用系统。我们目前的系统存在诸多子系统而这些子系统是分别部署在不同的服务器中那么使用传统方式的session是无法解决的我们需要使用相关的单点登录技术来解决。二、什么是CASCAS 是 Yale 大学发起的一个开源项目旨在为 Web 应用系统提供一种可靠的单点登录方法CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点【1】开源的企业级单点登录解决方案。【2】CAS Server 为需要独立部署的 Web 应用。【3】CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用)包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。从结构上看CAS 包含两个部分 CAS Server 和 CAS Client。CAS Server 需要独立部署主要负责对用户的认证工作CAS Client 负责处理对客户端受保护资源的访问请求需要登录时重定向到 CAS Server。下图是 CAS 最基本的协议过程从结构上看CAS 包含两个部分 CAS Server 和 CAS Client。CAS Server 需要独立部署主要负责对用户的认证工作CAS Client 负责处理对客户端受保护资源的访问请求需要登录时重定向到 CAS ServerSSO单点登录访问流程主要有以下步骤访问服务SSO客户端发送请求访问应用系统提供的服务资源。定向认证SSO客户端会重定向用户请求到SSO服务器。用户认证用户身份认证。发放票据SSO服务器会产生一个随机的Service Ticket。验证票据SSO服务器验证票据Service Ticket的合法性验证通过后允许客户端访问服务。传输用户信息SSO服务器验证票据通过后传输用户认证结果信息给客户端。三、CAS服务端部署3.1 template下载下载CAS 模板 Overlay Template我这里使用 Apereo CAS 5.3.x 版本JDK需要1.8。6.x.x 版本JDK需要11。地址https://github.com/apereo/cas-overlay-template/tree/5.3解压下载的zip压缩包解压后使用maven命令打包mvn package把target下生成的war包重命名为cas.war放到tomcat下启动tomcat找到解压的文件由于CAS默认使用的是基于https协议,需要改为兼容使用http协议到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes这是我的目录去你对应目录下找不要找错啊实在不行用everything搜索吧目录的application.properties添加如下的内容cas.tgc.securefalse cas.serviceRegistry.initFromJsontrue到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes\services目录下的HTTPSandIMAPS-10000001.json修改内容如下,即添加http{class:org.apereo.cas.services.RegexRegisteredService,serviceId:^(https|http|imaps)://.*,name:HTTPS and IMAPS,id:10000001,description:This service definition authorizes all application urls that support HTTPS and IMAPS protocols.,evaluationOrder:10000}兼容http修改完毕,由于https协议默认使用的端口为8443,我们修改为tomcat的8080端口到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes目录的application.properties添加如下的内容server.port8080由于默认的用户名和密码为casuser::Mellon不好记忆,修改用户名和密码根据需要修改成自己想要的到D:\software\apache-tomcat-8.5.43\webapps\cas\WEB-INF\classes目录的application,properties的最后面修改密码为如下cas.authn.accept.userswno704::19920503CAS服务器搭建完毕,重启tomcat 进行测试在浏览器中输入http://localhost:8080/cas/login或者http://localhost:8080/cas即可跳转到cas服务登录界面如下图输入账号和密码即可登入如下图在浏览器输入http://localhost:8080/cas/logout即可退出服务如下图四、客户端搭建接下来搭建springboot项目的客户端14.1 增加依赖在新建的springboot项目的pom.xml添加如下依赖匹配对应的版本!-- https://mvnrepository.com/artifact/net.unicon.cas/cas-client-autoconfig-support --dependencygroupIdnet.unicon.cas/groupIdartifactIdcas-client-autoconfig-support/artifactIdversion2.3.0-GA/version/dependency4.2 修改application.ymlcas: server-url-prefix: http://localhost:8080/cas # #cas服务端的地址 server-login-url: http://localhost:8080/cas/login #cas服务端的登录地址 client-host-url: http://localhost:${server.port} #当前服务器的地址(客户端) validation-type: cas3 #Ticket校验器使用Cas30ProxyReceivingTicketValidationFilter4.3 修改启动类EnableCasClientSpringBootApplicationpublicclassCasApplication{publicstaticvoidmain(String[]args){SpringApplication.run(CasApplication.class,args);}}五、测试5.1 编写测试类在新建一个测试类TestCas代码如下RestControllerEnableAutoConfigurationpublicclassTestCas{RequestMapping(/test)publicStringtest(){returntest....;}}5.2 创建服务启动应用后服务如下5.3 测试客户端1客户端2和cas服务器搭建好之后接下来我们进行测试首先启动上面步骤中放置了cas的tomca服务器进入D:\software\apache-tomcat-8.5.43\bin目录下找到startup.bat双击即可启动。启动客户端1和客户端2在浏览器中输入http://localhost:8088/test即跳转到cas登录验证界面如下图在不登录的情况下在浏览器另一窗口输入客户端2即在浏览器中输入http://localhost:8089/test同样进入到了cas登录验证界面如下图当我们在其中一个登录界面登录账号后假设登录客户端2就会跳转到登陆后的界面如下图我们再次在浏览器窗口重新输入客户端1http://localhost:8089/test或者在刚刚输入客户端页面重新刷新不用登录即可进入页面如下图至此整个单点登录的测试就结束。