小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

集成CAS單點(diǎn)登錄使用Shiro Session時(shí),實(shí)現(xiàn)多點(diǎn)登出的解決辦法

 KILLKISS 2017-04-13

集成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)的代碼。
https://github.com/howiefh/framework

集成辦法:
1 將io.github.howiefh.cas.session下面的3個(gè)類加入到工程中。

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è)方法的解決思路是:
1 首先記錄CAS Token, 在登錄后CAS Server回調(diào)時(shí)進(jìn)行。將Token和Shiro session id綁定起來(用HashMap)。

2 然后收到CAS Server發(fā)過來的登出post請求時(shí),根據(jù)token取得Shiro session id,將session id做一個(gè)清理標(biāo)記。
這時(shí)候不能直接進(jìn)行登出處理,因?yàn)閾碛衛(wèi)ogout方法的Shiro Subject對象是和線程綁定的,所以這里不能獲取到正確的Subject對象。

3 用戶再次使用網(wǎng)站時(shí),這時(shí)候檢查用戶的Shiro session id是不是已被標(biāo)記為清理。
如果已被標(biāo)記,此時(shí)掉用Subject對象的logout方法,進(jìn)行登出處理。

供參考。


    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多