成功登录后,JSESSIONID将自动重新创建

时间:2013-06-10 07:20:10

标签: java session jsessionid

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

流程是login.jsp - > loginwebaction - > loginsuccess.jsp - >过滤器 - > otheraction

我的代码是

  1. 成功登录后(在loginwebaction中),
  2. 将所有属性复制到会话中的地图
  3. 使会话无效,
  4. 重新创建会话HttpSession session = request.getSession(true);
  5. 将所有属性从地图复制到新会话
  6. 成功登录后显示Jsessionid并显示loginsuccess.jsp。但我有一些问题。

    在此之后,如果我点击任何其他链接进行其他操作,则会点击过滤器。 在过滤器中,如果他已登录,我必须检查会话中的用户信息,否则必须显示错误页面。

    HttpSession session = request.getSession();
    if(null == session.getAttribute("USER_INFO")){
        //redirect to error page
    }
    

    问题是:在过滤器中访问的会话是新的,不知道如何重新创建它。过滤器中的代码是

    任何人都可以帮助我,如何进一步纠正这次会议变更?

1 个答案:

答案 0 :(得分:1)

正如我所看到的,代码中的问题是:

HttpSession session = request.getSession();

Servlet API开始,如果没有现有会话,request.getSession()会创建一个新会话。您需要将其更改为:

HttpSession session = request.getSession(false);

这将确保它返回现有的会话对象(如果有效),或者如果没有会话则返回null。

要添加更多内容,以下几行代码实际上是相同的:

HttpSession session = request.getSession();
//Overloaded getSession with 'true' boolean argument
HttpSession session = request.getSession(true);

希望这有帮助。

如果这不能解决您的问题,那么问题可能就是其他问题。请添加您的用例的Skeleton代码,以便我可以尝试一下。