gpt4 book ai didi

java - 成功登录后自动重新创建 JSESSIONID

转载 作者:行者123 更新时间:2023-11-30 11:31:43 28 4
gpt4 key购买 nike

要求是登录前后JSESSIONID必须不同。

流程是login.jsp -> loginwebaction -> loginsuccess.jsp -> filter -> otheraction

我的代码是

  1. 成功登录后(在 loginwebaction 中),
  2. 将 session 中的所有属性复制到 map 中,
  3. 使 session 无效,
  4. 重新创建 session HttpSession session = request.getSession(true);
  5. 将 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com