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

}

 

posted @ 2020-03-12 19:10  由良大小姐  阅读(1952)  评论(0编辑  收藏  举报