• -------------------------------------------------------------
  • ====================================

集成CAS单点登录使用Shiro Session时,实现多点登出的解决办法

技能 dewbay 5年前 (2019-04-12) 2457次浏览 已收录 0个评论 扫描二维码

集成 CAS 单点登录的项目中,实现多点登出效果(在 A 网站点退出后,共享同一个 CAS TGT 票据的 B 网站也被退出)比较简单,集成官方解决方案的配置(在 web.xml 中配置casSingleSignOutFilter)即可。

但是官方解决方案只是对标准的 http session进行处理。

如果项目中使用了 Shiro Session 进行管理的话,官方解决方案无法实现多点登出效果。

因此需要自行实现收到 CAS 服务器发过来的 logout 请求时,自行处理销毁 Shiro Session 的逻辑。

Github 上有这个实现的代码。
https://github.com/howiefh/framework

集成办法:
1 将 io.github.howiefh.cas.session下面的 3 个类加入到工程中。

CasLogoutFilter.java
HashMapBackedSessionMappingStorage.java
SingleSignOutHandler.java
1
2
3
2 shirocas的配置文件中,加入 CasLogoutFilter 的配置。

<bean id="casLogoutFilter" class="io.github.howiefh.cas.session.CasLogoutFilter">
    <property name="sessionManager" ref="sessionManager"/>
</bean>

1
2
3

/casFailure.jsp = anon /cas = casLogout,cas /logout = logout /** = casLogout,user
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
这个方法的解决思路是:
1 首先记录 CAS Token, 在登录后 CAS Server 回调时进行。将 Token 和 Shiro session id 绑定起来(用 HashMap)。

2 然后收到 CAS Server 发过来的登出 post 请求时,根据 token 取得 Shiro session id,将session id 做一个清理标记。
这时候不能直接进行登出处理,因为拥有 logout 方法的 Shiro Subject 对象是和线程绑定的,所以这里不能获取到正确的 Subject 对象。

3 用户再次使用网站时,这时候检查用户的 Shiro session id 是不是已被标记为清理。
如果已被标记,此时掉用 Subject 对象的 logout 方法,进行登出处理。

供参考。

作者:zhmz1326
来源:CSDN
原文:https://blog.csdn.net/zhmz1326/article/details/52287649
版权声明:本文为博主原创文章,转载请附上博文链接!


露水湾 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:集成CAS单点登录使用Shiro Session时,实现多点登出的解决办法
喜欢 (2)
[]
分享 (0)
关于作者:
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址