不同域下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; } } }