在某个请求获取HttpSession时,shiro JSESSIONID被覆盖
业务场景:在用户登录之后,shiro会在cookies中记录自己的sessionid;它对应的key默认是JSESSIONID;然后在某一次请求获取HttpSession(浏览器与服务器交互第一次获取HttpSession);然后在发送一个新的请求就需要重新登录
具体分析:在shiro登录成功之后会默认的给浏览器cookies中写一个sessionid,key是JSESSIONID(shiro与浏览器);然后再第一次获取HttpSession的时候,session是一个空,他回去新建,新建成功之后他也会返回sessionid,key也是JSESSIONID;他就会覆盖掉shiro的JSESSIONID,所以需要重新登录;具体可以看一下request.getSession();源码,还有shiro登录成功之后的具体流程;
修改办法:设置shiro的key为自定义key,我是把设置成了“sid”
@Bean
public SessionManager sessionManager(){
CustomSessionManager customSessionManager = new CustomSessionManager();
customSessionManager.setSessionDAO(sessionDAO());
//设置登录超时时间
customSessionManager.setGlobalSessionTimeout(1000*60*60*2);
//设置自己的cookies里面的sessionid名称
SimpleCookie sid = new SimpleCookie("sid");
customSessionManager.setSessionIdCookie(sid);
return customSessionManager;
}