微信小程序 服务端shiro用户验证,偶然会出现验证失败的问题。

1、开始有人反应用偶然会加载失败的情况,一开始还不太相信,因为每次手机运行都正常(iOS)。

2、查看日志,发现果然有验证不通过的问题出现。

3、经过测试跟踪发现了成功的时候返回的数据,与失败的时候返回的数据的顺序不一样。

4、失败的情况都是android手机,iOS没有发现过这种问题。

失败的时候:

 成功的时候:

Shiro的认证,是通过JSESSIONID来的。

测试了很多次,只要是正常验证通过的,都是JSESSIONID开头的。

 

解决:

将开始的代码:

wx.setStorageSync("sessionId", res.header["Set-Cookie"]);

改为:

var cookie = res.header['Set-Cookie']
           // 字符串分割成数组
           var cookieArray = cookie.split(/,(?=[^,]*=)/)
           // 分号拼接数组
           var newCookie = cookieArray.join(';')
           // 存储拼接后的cookie
           try {
             wx.setStorageSync('sessionId', newCookie)
           } catch (error) {
             log.error('setStorageSync cookie fail')
           }

 

今天又碰到了这个问题,第一次加载,Shiro返回了JSESSIONID,则一切正常,第二次刷一下,没有返回JSESSIONID,

导致后台取数失败,那么这个问题如何解决呢?

后台扩展:

entity.setJsessionid(req.getSession().getId());

  微信小程序:

if (newCookie.indexOf('JSESSIONID') == -1) {
      newCookie =
        "JSESSIONID=" + res.data.jsessionid + "; Path=/" + newCookie;
    }

经过以上的扩展,就可以顺利访问了。 // 2022-11-9

 

参考:

https://blog.csdn.net/czx0132/article/details/110101854 (分析的相当精典)

 

posted @ 2022-01-01 14:21  jiduoduo  阅读(388)  评论(0编辑  收藏  举报