用户登录成功后重新获取Session

漏洞修复:Session会话登录前后无变化问题
这个漏洞意思是说用户登录系统前后Session变化,就是JSESSIONID没有改变
用户登录成功后重新获取Session
文章图片


所以要在用户登录成功后在Filter(拦截器)或者登录Action里加入以下代码:

HttpServletRequest request = ServletActionContext.getRequest(); //获取旧Session HttpSession session = request.getSession(false); System.out.println("------------>旧session:" + session.getId()); //清空session session.invalidate(); //重新获取session session = request.getSession(true); System.out.println("------------>新session:" + session.getId()); //将登录的用户保存到新Session session.setAttribute(SysProperties.LOGIN_OBJECT, loginObject);

打印结果:
------------>旧session:45E48C020751A402A5AE5B7FDEC41B5A ------------>新session:EDE76FBC7D9DBF7CABC0ED025B350131

这里要说的重点是request.getSession()参数True和False的区别:
request.getSession(true):若存在会话则返回该会话,否则新建一个会话。
request.getSession(false):若存在会话则返回该会话,否则返回NULL。
这里还有一个题外话,就是如果清除Cookie:
//获取cookie Cookie cookie = request.getCookies()[0]; //让cookie过期 cookie.setMaxAge(0);

不过清除Cookie后要及时新建Session,否则会报错。




【用户登录成功后重新获取Session】

    推荐阅读