shiro解決兩個請求的sessionId相同,但是某一個傳入sessionId之后找不到session的原因


 

不同域下cookie中的jsessionId不同,這樣的request對象傳入后端,即使header傳的sessionId(token)相同,也找不到session,所以遇到這種問題就要看jesessionId和sessionId(token)是否一致,以及是否在同一個域下。

那是因為傳入的另一個對象 request對象的header里的jsessionid和另一個請求不同的原因,是因為另一個項目測試環境下放在同事的電腦上,我這個前端項目放在nginx下,所以不同,

測試將他的項目和我的項目都放入nginx下時,jsessionid相同,能夠找到session了,工作正常。

 

public class ShiroUtils {

    public static String getUsername(String token, HttpServletRequest request, HttpServletResponse response) {
        String username = null;
        String sessionID = token;
        if (sessionID == null) {
            return "null";
        } else {
            SessionKey key = new WebSessionKey(sessionID, request, response);
            try {
                Session se = SecurityUtils.getSecurityManager().getSession(key);
//                解決因為session過期而導致的異常直接拋出到前端
                if (se == null) {
                    return "null";
                }
                Object obj = se.getAttribute(DefaultSubjectContext.PRINCIPALS_SESSION_KEY);
                SimplePrincipalCollection coll = (SimplePrincipalCollection) obj;
                username = coll.getPrimaryPrincipal().toString();
            } catch (Exception e) {
//                e.printStackTrace();
                return "null";
            } finally {
            }
            return username;
        }
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM