天天看點

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;
        }
    }

}