要解决会话标识未更新的安全问题,就需要在做登录验证时生成新的session,所以需要先将原来的session失效。
一般的解决方法如下:
public void login(HttpServletRequest request, ...){
// 让旧session失效
request.getSession(true).invalidate();
//登录验证
}
但是,如果使用了shiro框架,这样做会报错:...Session already invalidated。原因是shiro对HttpSession进行了一层包装,你直接让原生的session失效,没有通知shiro,shiro再去使用session时就会报错了。
解决方法,不要使用原生的失效方法,而是使用shiro自己提供的api方法:SecurityUtils.getSubject().logout();
public void login(String username,String password){
// 让旧session失效
SecurityUtils.getSubject().logout();
//登录验证
}