Java 成功登录后将自动重新创建JSESSIONID
要求JSSessionID在登录前后必须不同 流程是login.jsp->loginwebaction->loginsAccess.jsp->filter->otheraction 我的代码是Java 成功登录后将自动重新创建JSESSIONID,java,session,jsessionid,Java,Session,Jsessionid,要求JSSessionID在登录前后必须不同 流程是login.jsp->loginwebaction->loginsAccess.jsp->filter->otheraction 我的代码是 成功登录后(在loginwebaction中) 将所有属性从会话复制到映射 宣布会议无效 重新创建会话HttpSession session=request.getSession(true) 将所有属性从映射复制到新会话 成功登录后JSSessionID将发生更改,并显示loginsAccess.jsp。
HttpSession session=request.getSession(true)代码>
HttpSession session = request.getSession();
if(null == session.getAttribute("USER_INFO")){
//redirect to error page
}
问题是:在筛选器中访问的会话是新的,不知道如何重新创建。过滤器中的代码是
有人能帮我解决这个问题吗?如何进一步纠正此会话更改?正如我所看到的,您代码中的问题是:
HttpSession session = request.getSession();
从,request.getSession()
创建一个新会话(如果没有现有会话)。您需要将其更改为:
HttpSession session = request.getSession(false);
这将确保它返回现有会话对象(如果有效),如果没有会话,则返回null
除此之外,以下代码行实际上是相同的:
HttpSession session = request.getSession();
//Overloaded getSession with 'true' boolean argument
HttpSession session = request.getSession(true);
希望这有帮助
如果这不能解决您的问题,那么问题可能是其他问题。请添加用例的框架代码,以便我可以尝试一下。当显示loginsucess.jsp时,浏览器http响应头是否包含新的或旧的JSSessionID?要看到这一点,您可能必须跟踪http消息或使用浏览器调试来查看Cookie/页面源。可能您需要在响应中手动设置新的JSSessionID标头?无法再现错误,请发布源代码和配置详细信息。您是否检查了客户端是否有多个会话协作?是,在某些情况下可能会发生这种情况。您还可以使用查看客户端和服务器之间交换的请求和响应。另一种方法可能是在创建/销毁会话时使用日志。我认为这没有帮助。正如giri所写,过滤器看到的会话是新的。如果筛选器是创建新会话的筛选器,则您的建议只会返回
null
,但此时应该有一个现有会话。