微信小程序 服务端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 (分析的相当精典)
道法自然