要解决会话标识未更新的安全问题,就需要在做登录验证时生成新的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();
//登录验证
}

本文详细介绍了如何在使用Shiro框架进行登录验证时,避免会话标识未更新导致的安全问题。通过使用Shiro提供的API方法SecurityUtils.getSubject().logout()来失效旧session,确保新session的有效性。
1万+

被折叠的 条评论
为什么被折叠?



