• 微信端浏览器有两个相同名的cookie在shiro引发无法认证问题


    目前后端用户认证用了shiro,把session保存在了redis。在部署上去后发现微信上再调用subject.login()之后,重新开一个页面,subject.isAuthenticated()却还是false。但我在微信开发工具里打开网页却是正常,能记住用户。这现象让我不禁怀疑是不是微信端的cookie没有在浏览器上带过来。在代码上打印出cookie:

            javax.servlet.http.Cookie[] cookies = request.getCookies();
            if(cookies !=null) {
                for ( javax.servlet.http.Cookie cookie:cookies  ) {
                    log.info("从浏览器获取"+cookie.getName()+"的值:"+cookie.getValue()+"domain:" + cookie.getDomain() + "path:" + cookie.getPath() + "MaxAge:" + cookie.getMaxAge() + "Secure:" + cookie.getSecure());
                }
            }

    发现有两个JSESSIONID,一个值有存在redis,一个值没有。我们知道JSESSIONID是用来记住登陆状态的,还有一个cookie是rememberMe,用户记住用户,有效期一年,是用户在安全不用太严格的情况下记住用户的。

    另一方面,在微信开发者工具上,JSESSIONID只有一个。我也不清楚是不是只有微信浏览器才有这种问题(据说只要cookie的domain,path,expire有一个不同cookie就可以重名),但无法认证的问题应该就是由于多出了个session里不存在JSESSIONID导致认为用户没有登陆。

    在shiro中把cookie的名字改掉,这个问题就没有了。

    这个问题引申出如果要改cookie的domain啥的一定要慎重,可能会导致多出一个cookie使老用户的登录出现问题。

  • 相关阅读:
    数论笔记
    哈哈哈
    闭关修炼屯题中,期末考完A
    acm几何
    POJ
    Educational Codeforces Round 42 (Rated for Div. 2) D.Merge Equals (优先队列)
    Educational Codeforces Round 42 (Rated for Div. 2) C. Make a Square (dfs)
    牛客网 VVQ 与线段 (优先队列或线段树或RMQ)
    Educational Codeforces Round 41 (Rated for Div. 2) C.Chessboard (DP)
    Educational Codeforces Round 41 (Rated for Div. 2)D. Pair Of Lines
  • 原文地址:https://www.cnblogs.com/zjhgx/p/16211779.html
Copyright © 2020-2023  润新知