概述
#单点登录 #cas 跨域名 单点登出 #cas使用教程
Springboot后台使用 pac4j 4.0
配置Cas+Shiro之后碰见CasRealm里的验证方法不识别 JwtToken
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
在CasRealm里重写supports
/**
* 重点:注意,这里必须判断,cas登录时,token类型为AuthenticationToken
*
* @param token
* @return
*/
@Override
public boolean supports(AuthenticationToken token) {
if (token instanceof JwtToken) {
return token instanceof JwtToken;
}
return token instanceof AuthenticationToken;
}
Cas跨顶级域名单点登出失效问题
Client1 www.aaa.com
Client2 www.bbb.com
登出 Client1 , Client2 刷新后不会登出。
网上找了一大堆资料,全部无用,暂时只能是用Nginx转发或二级域名去配置,等找到更好的解决方法再更新。
2021年12月21日09:47:46 更新
SpringBoot添加Filter
@Bean
public ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> singleSignOutHttpSessionListener() {
ServletListenerRegistrationBean<SingleSignOutHttpSessionListener> listener = new ServletListenerRegistrationBean<SingleSignOutHttpSessionListener>();
listener.setEnabled(true);
listener.setListener(new SingleSignOutHttpSessionListener());
listener.setOrder(1);
return listener;
}
/**
* 该过滤器用于实现单点登出功能,单点退出配置,一定要放在其他filter之前
*
* @return
*/
@Bean
public FilterRegistrationBean singleSignOutFilter() {
FilterRegistrationBean filterRegistration = new FilterRegistrationBean();
filterRegistration.setFilter(new SingleSignOutFilter());
filterRegistration.setEnabled(true);
filterRegistration.addUrlPatterns("/*");
filterRegistration.addInitParameter("casServerUrlPrefix", casServerUrl);//Cas的地址
filterRegistration.addInitParameter("serverName", projectUrl);//当前项目的地址
filterRegistration.setOrder(1);
return filterRegistration;
}
然后直接调用 casServerUrl + "/logout"
他会向通知每个客户端,可以启动两个项目hosts配置
127.0.0.1 www.cas1.com
127.0.0.1 www.cas2.com
并在SingleSignOutHttpSessionListener()的 sessionDestroyed方法下打断点
在网址输入 casServerUrl + "/logout" 回车,查看两个项目是否都进入 sessionDestroyed 方法。
如无法进入请检查网络。
我的环境:
Cas-Overlay-template 5.3.14 使用了redis存储ticket
Cas Server引入
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-redis-ticket-registry</artifactId>
<version>${cas.version}</version>
</dependency>
<dependency>
<groupId>org.apereo.cas</groupId>
<artifactId>cas-server-support-redis-service-registry</artifactId>
<version>${cas.version}</version>
</dependency>
application.properties 添加设置
#是否移除子系统的票据
cas.logout.removeDescendantTickets=true
cas.slo.asynchronous=true
#Redis
cas.ticket.registry.redis.host=192.168.1.100
cas.ticket.registry.redis.database=0
cas.ticket.registry.redis.port=6379
cas.ticket.registry.redis.password=
cas.ticket.registry.redis.timeout=20000
cas.ticket.registry.redis.useSsl=false
cas.ticket.registry.redis.usePool=false
cas.ticket.registry.redis.pool.max-active=20
cas.ticket.registry.redis.pool.maxIdle=8
cas.ticket.registry.redis.pool.minIdle=0
cas.ticket.registry.redis.pool.maxActive=8
cas.ticket.registry.redis.pool.maxWait=-1
亲测有效。
最后
以上就是懵懂导师为你收集整理的SpringBoot+Cas+Shiro+JWT问题总结的全部内容,希望文章能够帮你解决SpringBoot+Cas+Shiro+JWT问题总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复