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

漏洞修复:Session会话登录前后无变化问题

这个漏洞意思是说用户登录系统前后Session变化,就是JSESSIONID没有改变

用户登录成功后重新获取Session_第1张图片

所以要在用户登录成功后在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,否则会报错。



你可能感兴趣的:(Java)