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

标签 java session jsessionid

要求是登录前后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/

相关文章:

java - 自动填充颜色?

php - 检查用户登录ajax页面是否更改

kubernetes - 如何使用容器为具有(长期)粘性 session 的应用程序进行零停机滚动更新

java - 尽管跟踪模式 cookie,JBoss 7 仍将 JSESSIONID 附加到 URL

java - 我如何声明这样的函数?

java - 检查 ScrollView 是否已经到达布局的顶部

php - 我认为我的 PHP 应用程序被 session 劫持了?

tomcat - nginx 和 tomcat(使用 memcached session 管理器)配置上下文 cookies ="false"

java - 将非静态返回值合并到静态方法中?

ruby-on-rails-3 - AuthLogic 似乎为一个请求多次更新用户记录