shiro +springmvc+freemarker session問題處理 shiro無法記錄登陸前頁面問題

調試shiro 處理登陸後頁面跳轉問題時,頁面總是無法跳轉到之前訪問的頁面去,查看配置,沒有問題。

經查看 登陸前已經保存了請求,但是登陸後獲取卻爲空,經查看登陸前後的sessionid 不一致。

shiro 配置如下:

<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="frontsystemAuthorizingRealm" />
<property name="cacheManager" ref="shiroCacheManager" />
</bean>

每次請求sessionid應該一致,但是卻發現每次訪問sessionid都不一樣,一個瀏覽器一個窗口的情況

最後發現,原來代碼中多做了用戶退出操作。

雖然刪了多餘的用戶退出,還是無法記錄之前訪問的頁面,最後發現以下shiro 源碼:

public static SavedRequest getAndClearSavedRequest(ServletRequest request) {
        SavedRequest savedRequest = getSavedRequest(request);
        if (savedRequest != null) {
            Subject subject = SecurityUtils.getSubject();
            Session session = subject.getSession();
            session.removeAttribute(SAVED_REQUEST_KEY);
        }
        return savedRequest;

該方法在一次請求中不能重複調用。


另外:使用org.apache.shiro.web.session.mgt.DefaultWebSessionManager

卻出現sessionid 不存在異常

經查看是 freemarker 訪問標籤時調用的session 不存在導致,初步解釋,freemarker 和DefaultWebSessionManager 存在兼容性問題


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章