【问题标题】:Sturts 2 session invalidation with setting request session to a new session通过将请求会话设置为新会话来使 2 会话失效
【发布时间】:2013-06-20 15:57:56
【问题描述】:

在我的 Struts 应用程序中,一旦用户登录,我需要使当前会话无效并创建一个新会话。我使会话无效

getHttpServletRequest().getSession().invalidate();

我创建了一个新会话

getHttpServletRequest().getSession(true);

这里的问题是在上面我尝试访问getSession() 它给出了状态无效异常; HttpSession 无效。

getSession() 返回一个映射,在我的操作类中我实现了SessionAware,它具有setSession(Map session)

编辑:以下是例外情况

Error creating HttpSession due response is commited to client. You can use the CreateSessionInterceptor or create the HttpSession from your action before the result is rendered to the client: HttpSession is invalid
java.lang.IllegalStateException: HttpSession is invalid

所以,我认为问题在于 Struts getSession() 仍然引用了我已失效的会话。

如何让 Struts getSession() 引用我创建的新会话?

【问题讨论】:

  • 你检查过 web.xml 中的会话超时吗?
  • 谢谢。它设置为 30
  • 当你使servlet会话无效时,你为什么要访问struts会话?
  • 是这样的。动作转发的 jsp 具有 s:token 标记。我假设创建一个令牌并尝试将其放入会话中。而这个 s:token 可能无法通过请求访问会话。这就是编辑后的答案异常抛出的点。
  • 实际上在这个 s:token 问题之前我放了一个 getSession() 语句,当该行执行会话无效异常时抛出。但是后来我确实喜欢 setSession(null) 并再次分配 getSession(map) 并打印 getSession() 然后那个异常就消失了。现在,当 jsp 呈现上述异常时,由于 s:token 而发生了我发布的异常

标签: java struts2 httpsession


【解决方案1】:

如果您想在使 servlet 会话无效后访问 struts 会话,您应该更新或更新 struts 会话。例如

SessionMap session = (SessionMap) ActionContext.getContext().getSession();

//invalidate
session.invalidate();

//renew servlet session
session.put("renewServletSession", null);
session.remove("renewServletSession");

//populate the struts session
session.entrySet();

现在 struts 会话已准备好使用新的 servlet 会话,并且您已准备好重用 struts 会话。

【讨论】:

  • 上面的代码应该在我从请求中获取的会话无效之后放置,对吗?然后它说会话已经失效知道吗?我所做的是,首先我从请求中获取会话并将其无效。然后添加包含失效的代码(对于 struts 会话),最后使用请求创建一个新会话
  • @Harshana 不,您不应该使 servlet 会话无效,您应该使 struts 会话无效,这样做您 1) 清理 struts 会话 2) 使 servlet 会话无效。您应该替换代码。代替getHttpServletRequest().getSession().invalidate(); 放置我的代码,不要getHttpServletRequest().getSession(true)
  • 谢谢罗曼。奇迹般有效。以上的全部目的是修复会话固定。由于它将原始请求会话 id 更改为新的,因此您的解决方案也成功解决了它。我更改了标题并修改了问题,以突出如何在 struts 2 中使 struts 会话无效的想法,以便其他人受益,因为您的信息无法在 google 中找到。再次感谢。
猜你喜欢
  • 2015-04-26
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 2013-01-27
  • 2013-06-29
  • 2013-01-20
  • 2017-06-17
  • 1970-01-01
相关资源
最近更新 更多