要求是登录前后JSESSIONID必须不同。
流程是login.jsp -> loginwebaction -> loginsuccess.jsp -> filter -> otheraction
我的代码是
- 成功登录后(在 loginwebaction 中),
- 将 session 中的所有属性复制到 map 中,
- 使 session 无效,
- 重新创建 session
HttpSession session = request.getSession(true);
- 将 map 中的所有属性复制到新 session 中,
登录成功后jssessionid发生变化,显示loginsuccess.jsp。但我有一个问题。
在此之后,如果我单击任何其他链接以执行其他操作,它会触发过滤器。 在过滤器中,如果他已经登录,我必须检查 session 中的用户信息,否则必须显示错误页面。
HttpSession session = request.getSession();
if(null == session.getAttribute("USER_INFO")){
//redirect to error page
}
问题是:在过滤器中访问的 session 是新的,不知道它是如何重新创建的。过滤器中的代码是
谁能帮我解决这个问题,如何进一步纠正这个 session 更改?
最佳答案
据我所知,您的代码中的问题是:
HttpSession session = request.getSession();
来自 Servlet API , request.getSession()
如果没有现有 session ,则创建一个新 session 。您需要将其更改为:
HttpSession session = request.getSession(false);
这将确保它返回现有的 session 对象(如果有效)或如果没有 session 则返回 null。
再补充一点,下面几行代码实际上是相同的:
HttpSession session = request.getSession();
//Overloaded getSession with 'true' boolean argument
HttpSession session = request.getSession(true);
希望这对您有所帮助。
如果这不能解决您的问题,则问题可能出在其他地方。请添加您的用例的骨架代码,以便我尝试一下。
关于java - 成功登录后自动重新创建 JSESSIONID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17018695/