单点登录基本配置可以参考上一篇springboot+shiro+cas5.2实现SSO单点登录(超详细)
使用RESTful协议可以用之前项目的登录页,在不改动原本的cas服务端,不使用cas服务端原本的登录页面的情况下,进行sso单点登录
一、在cas服务端pom.xml里添加rest的jar包(我是在压缩文件的pom.xml里添加的,然后重新mvn clean package打包)
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-rest</artifactId>
<version>${cas.version}</version>
</dependency>
二、找到WEB-INF\classes\application.properties位置添加如下内容。
# 开启rest验证并配置url
cas.authn.rest.uri=http://192.168.10.77:8080/v1
# 设置ticket过期时间,默认是10秒
cas.ticket.st.numberOfUses=1
cas.ticket.st.timeToKillInSeconds=60
三、获取TGT,post请求,参数为用户名、密码
http://localhost:8080/cas/v1/tickets
使用postman发请求测试
四、根据TGT获取ST,post请求,参数为客户端的服务名(需要访问客户端的地址,错误的话给的ticket不能免登录)
http://localhost:8080/cas/v1/tickets/TGT-XXXXXXXXXX
使用postman发请求测试
五、输入网址http:192.168.10.77:8010/shiro_cas?ticket=ST-1-hDkN-a5LcuuhaRLE4HwKc39XPUQ-dell-PC,访问成功跳转首页。
这里需要注意的是,我的shiro里面配置的访问“/shiro_cas”会进到cas过滤器里,拿着ticket票证到cas过滤器后,会向cas服务端发请求验证ticket票证的有效性,验证通过会返回登录用户名,跳转到首页。所以上一步获取ST传的参数service需要能进到cas过滤器。
public static final String casFilterUrlPattern = "/shiro_cas";
//CAS过滤器
@Bean(name = "casFilter")
public CasFilter getCasFilter() {
MyCasFilter casFilter = new MyCasFilter();
casFilter.setName("casFilter");
casFilter.setEnabled(true);
casFilter.setFailureUrl(loginUrl);
casFilter.setSuccessUrl("/index");
return casFilter;
}
private void loadShiroFilterChain(ShiroFilterFactoryBean shiroFilterFactoryBean) {
Map<String, String> filterChainDefini