包含原理配置实现及简易demo CAS4.1单点登录实现( 二 )


①引入CAS 依赖
在pom.xml中引入CAS 的依赖包 。代码如下:
net.unicon.cascas-client-autoconfig-support2.3.0-GA
②配置
在.或者.yml中添加相关配置 , 主要配置内容包括服务器的相关地址 , 客户端的相关地址等 。我这里是.yml , 配置内容如下:
(注意配置时的端口区分 , 本demo中 , 客户端2采用端口8890 , 客户端3采用端口9990)
cas:#后端服务地址client-host-url: http://127.0.0.1:8890#cas认证中心地址server-url-prefix: http://127.0.0.1:9527/cas#cas认证中心登录地址server-login-url: http://127.0.0.1:9527/cas/login#Ticket校验器使用Cas30ProxyReceivingTicketValidationFiltervalidation-type: cas3
d0a8c8bd29becfae61dbb5dcdd1be228
③在启动类中添加启用注解
//启用CAS@EnableCasClient@SpringBootApplicationpublic class SpringBootSsoApplication { //省略部分内容 }
④编写测试接口层
import org.jasig.cas.client.authentication.AttributePrincipal;import org.jasig.cas.client.util.AbstractCasFilter;import org.jasig.cas.client.validation.Assertion;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;/*** Author Haozhonghao* Date 2021/12/20 10:00* Version 1.0*/@RequestMapping("/casTest2")@Controllerpublic class CASTestController {@Value(value = "http://www.kingceram.com/post/${cas.server-url-prefix}")private String serverUrlPrefix = "";@Value(value = "http://www.kingceram.com/post/${cas.client-host-url}")private String clientHostUrl = "";@GetMapping("/user2")@ResponseBodypublic String user(HttpServletRequest request) {Assertion assertion = (Assertion) request.getSession().getAttribute(AbstractCasFilter.CONST_CAS_ASSERTION);String loginName = null;if (assertion != null) {AttributePrincipal principal = assertion.getPrincipal();loginName = principal.getName();System.out.println("访问者2:" + loginName);}return "访问者2:" + loginName;}@GetMapping("/logout")public String logout(HttpSession session) {session.invalidate();return "redirect:" + serverUrlPrefix + "/logout?service=" + clientHostUrl + "/casTest2/user2";}@GetMapping("/test2")public String test() {return "test2....";}}
实现CAS 单点登录过程
测试过程:
初步测试时 , 开启服务端1、客户端2和客户端3 。打开浏览器 , 输入地址:9990//user3 , 出现如下报错:(输入客户端2的接口地址同样报错)
显示错误信息:权限配置问题
Notto Useyoutoto use CAS.
解决办法:
修改//cas/WEB-INF//目录下的-.Json文件:直接复制替换
?{"@class": "org.jasig.cas.services.RegexRegisteredService","serviceId" : "^(https|http|imaps)://.*","name": "https://localhost","id": 1,"evaluationOrder": 0,"logoutType": "BACK_CHANNEL","proxyPolicy" : {"allowedToProxy": true,"@class" : "org.jasig.cas.services.RegexMatchingRegisteredServiceProxyPolicy","pattern" : "^(https?)://localhost.*"}}?
修改后重启服务端及客户端
此时访问客户端2接口地址 , 能够正常显示如下界面 , 允许输入用户名及密码 , 便于测试仍然使用默认账号及密码(账号: , 密码:)
输入相应用户名及密码后 , 登陆成功:
输入客户端3接口地址后访问 , 直接登陆成功