首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在成功登录后,JSESSIONID将自动重新创建。

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

Stack Overflow用户
提问于 2013-06-10 07:20:09
回答 1查看 3.8K关注 0票数 2

这个要求是JSESSIONID在登录之前和之后必须不同。

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

我的代码是

  1. 成功登录后(在loginwebaction中),
  2. 将所有属性复制到会话中的映射中,
  3. 使会议无效,
  4. 重新创建会话HttpSession session = request.getSession(true);
  5. 将所有属性从map复制到新会话,

在成功登录并显示loginsuccess.jsp后,Jsessionid将发生更改。但我有个问题。

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

代码语言:javascript
复制
HttpSession session = request.getSession();
if(null == session.getAttribute("USER_INFO")){
    //redirect to error page
}

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

有谁能在这方面帮助我,如何进一步纠正本届会议的变化?

EN

回答 1

Stack Overflow用户

发布于 2013-06-18 18:26:01

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

代码语言:javascript
复制
HttpSession session = request.getSession();

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

代码语言:javascript
复制
HttpSession session = request.getSession(false);

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

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

代码语言:javascript
复制
HttpSession session = request.getSession();
//Overloaded getSession with 'true' boolean argument
HttpSession session = request.getSession(true);

希望这能有所帮助。

如果这不能解决你的问题,问题可能是别的问题。请添加您的usecase的骨架代码,以便我可以尝试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17018695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档