集成CAS单点登录的项目中,实现多点登出效果(在A网站点退出后,共享同一个CAS TGT票据的B网站也被退出)比较简单,集成官方解决方案的配置(在web.xml中配置casSingleSignOutFilter)即可。 但是官方解决方案只是对标准的http session进行处理。 如果项目中使用了Shiro Session进行管理的话,官方解决方案无法实现多点登出效果。 因此需要自行实现收到CAS服务器发过来的logout请求时,自行处理销毁Shiro Session的逻辑。 Github上有这个实现的代码。 集成办法: CasLogoutFilter.java HashMapBackedSessionMappingStorage.java SingleSignOutHandler.java 2 shiro-cas的配置文件中,加入CasLogoutFilter的配置。 <bean id="casLogoutFilter" class="io.github.howiefh.cas.session.CasLogoutFilter"> <property name="sessionManager" ref="sessionManager"/> </bean> <!-- Shiro的Web过滤器 --> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager"/> <property name="loginUrl" value="http://blog.csdn.net/zhmz1326/article/details/${shiro.login.url}"/> <property name="successUrl" value="http://blog.csdn.net/zhmz1326/article/details/${shiro.login.success.url}"/> <property name="filters"> <util:map> <entry key="cas" value-ref="casFilter"/> <entry key="logout" value-ref="logoutFilter" /> <entry key="casLogout" value-ref="casLogoutFilter" /> </util:map> </property> <property name="filterChainDefinitions"> <value> /casFailure.jsp = anon /cas = casLogout,cas /logout = logout /** = casLogout,user </value> </property> </bean> 这个方法的解决思路是: 2 然后收到CAS Server发过来的登出post请求时,根据token取得Shiro session id,将session id做一个清理标记。 3 用户再次使用网站时,这时候检查用户的Shiro session id是不是已被标记为清理。 供参考。 |
|