|
集成CAS單點(diǎn)登錄的項(xiàng)目中,實(shí)現(xiàn)多點(diǎn)登出效果(在A網(wǎng)站點(diǎn)退出后,共享同一個(gè)CAS TGT票據(jù)的B網(wǎng)站也被退出)比較簡單,集成官方解決方案的配置(在web.xml中配置casSingleSignOutFilter)即可。 但是官方解決方案只是對標(biāo)準(zhǔn)的http session進(jìn)行處理。 如果項(xiàng)目中使用了Shiro Session進(jìn)行管理的話,官方解決方案無法實(shí)現(xiàn)多點(diǎn)登出效果。 因此需要自行實(shí)現(xiàn)收到CAS服務(wù)器發(fā)過來的logout請求時(shí),自行處理銷毀Shiro Session的邏輯。 Github上有這個(gè)實(shí)現(xiàn)的代碼。 集成辦法: 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>
這個(gè)方法的解決思路是: 2 然后收到CAS Server發(fā)過來的登出post請求時(shí),根據(jù)token取得Shiro session id,將session id做一個(gè)清理標(biāo)記。 3 用戶再次使用網(wǎng)站時(shí),這時(shí)候檢查用戶的Shiro session id是不是已被標(biāo)記為清理。 供參考。 |
|
|