我有一个 servlet 负责多个站点,因此我希望为不同的站点建立不同的 session ,即使是同一用户。
Java 中有对此的支持吗?还是我需要在属性名称前加上前缀?我想前缀不是一个好主意。
/约翰内斯兄弟
最佳答案
仅根据 URL 参数,这不能在 servlet 容器中完成;你必须自己做。然而,管理“单独” session 的最简单方法是通过过滤器,而不是在 servlet 中处理属性前缀:
- 为 HttpSession 编写一个简单的包装类。让它保存一个属性映射并通过该映射返回所有属性/值方法;将所有其他方法委托(delegate)给您正在包装的实际 session 。重写
invalidate()
方法来删除 session 包装器,而不是终止整个“真实” session 。 - 编写一个servlet过滤器;映射它以拦截所有适用的 URL。
- 将 session 包装器集合作为真实 session 中的属性进行维护。
- 在过滤器的
doFilter()
方法中,从集合中提取适当的 session 包装器,并将其注入(inject)到您正在沿着链传递的请求中,方法是将原始请求包装到其 getSession() 方法的 HttpServletRequestWrapper 中被覆盖。 - 您的 servlet/JSP/等等...将享受“单独”的 session 。
请注意,Sessions 的“lastAccessedTime”与此方法共享。如果您需要将它们分开,则必须编写自己的代码来维护此设置并使 session 包装器过期。
关于java - Java 中一个 servlet 的多个 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1525486/