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