【问题标题】:Forward inside tomcat webapp: sessions are not expired在tomcat webapp内部转发:会话未过期
【发布时间】:2015-06-04 13:50:04
【问题描述】:

我有一个网络服务,它可以非常简单地转发到位于同一 Tomcat 容器上的另一个网络应用程序。

private Response forward(
        @Context ServletContext context,
        @Context HttpServletRequest request,
        @Context HttpServletResponse response){
    ServletContext ctx = context.getContext("/myothewebapp");   
    RequestDispatcher dispatcher=ctx.getRequestDispatcher("/test");
    dispatcher.forward(request, response);
    return Response.ok("").build();
}

除了这个 webapp 的会话没有过期这一事实之外,这可以正常工作。在 tomcat 管理器中,您可以看到打开的会话积累得非常快,多达数百个。

我不确定为什么在响应已经发送后它们会持续存在。 任何想法我的前向方法中缺少什么?

【问题讨论】:

  • 您转发的请求不会使会话失效...会话不会过期,除非您 1. 关闭浏览器 2. 手动使会话过期 3. 如果设置了会话超时,请等待。跨度>
  • session.invalidate(); 可用于使会话无效...session = request.getSession(true); 可用于获取新会话
  • 好的,但是如果我只用通常的 return Response.ok().build(); 终止请求,那么会话不会累积是怎么回事?
  • 每次转发到另一个应用程序时,都会创建一个新会话,它不会在应用程序之间共享会话...
  • 当您刚返回时,您仍在同一个应用程序中,因此没有创建新会话...

标签: java tomcat forward


【解决方案1】:

为什么它们会在响应已经发送时持续存在。

为什么您认为发送响应后会话会失效。

仅当会话超时或您使用以下命令强制使会话无效时才会失效:

Session#invalidate() method

【讨论】:

  • 因为我从来没有发生过如果我终止请求只是用通常的 return Response.ok().build();
  • 为什么会累积?,如果你只是返回,你仍然在同一个应用程序中,不会为它创建新会话!
猜你喜欢
  • 2013-06-13
  • 2011-12-02
  • 1970-01-01
  • 2014-01-21
  • 2013-07-23
  • 2016-06-22
  • 2020-04-25
  • 1970-01-01
  • 2016-02-28
相关资源
最近更新 更多