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