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