漏洞修复:Session会话登录前后无变化问题
这个漏洞意思是说用户登录系统前后Session变化,就是JSESSIONID没有改变
所以要在用户登录成功后在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,否则会报错。