解决shiro会话标识未更新问题

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


你可能感兴趣的:(安全,java,会话标识)