java - Java 中一个 servlet 的多个 session

标签 java session

我有一个 servlet 负责多个站点,因此我希望为不同的站点建立不同的 session ,即使是同一用户。

Java 中有对此的支持吗?还是我需要在属性名称前加上前缀?我想前缀不是一个好主意。

/约翰内斯兄弟

最佳答案

仅根据 URL 参数,这不能在 servlet 容器中完成;你必须自己做。然而,管理“单独” session 的最简单方法是通过过滤器,而不是在 servlet 中处理属性前缀:

  1. 为 HttpSession 编写一个简单的包装类。让它保存一个属性映射并通过该映射返回所有属性/值方法;将所有其他方法委托(delegate)给您正在包装的实际 session 。重写 invalidate() 方法来删​​除 session 包装器,而不是终止整个“真实” session 。
  2. 编写一个servlet过滤器;映射它以拦截所有适用的 URL。
  3. 将 session 包装器集合作为真实 session 中的属性进行维护。
  4. 在过滤器的 doFilter() 方法中,从集合中提取适当的 session 包装器,并将其注入(inject)到您正在沿着链传递的请求中,方法是将原始请求包装到其 getSession() 方法的 HttpServletRequestWrapper 中被覆盖。
  5. 您的 servlet/JSP/等等...将享受“单独”的 session 。

请注意,Sessions 的“lastAccessedTime”与此方法共享。如果您需要将它们分开,则必须编写自己的代码来维护此设置并使 session 包装器过期。

关于java - Java 中一个 servlet 的多个 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1525486/

相关文章:

java - 字节好友 : get method in intercepted fixedvalue

java - 从 Fragment 中完全删除 Action Bar

java - 哪种内存缓存实现需要花费最少的精力来构建

javascript - console.log 不会打印 Node js 中的所有快速 session 属性

php - 如何在 Codeigniter 中检查 session 是否已设置?

Java servlet session 无法与 NGinx 正常工作,如何修复?

angular - 如何在 Angular 6 中给 session 空闲超时?

java - 什么时候可以使用 "=="运算符?

java - Azure Toolkit 错误无法执行运行配置

asp.net - 如何显式地将 ASP.NET session 设置为仅在关闭浏览器或显式注销时过期?