存储并使不同用户的Java HttpSession无效

好的。 我想要做的是,当我更新用户时,可以使他们当前拥有的任何会话无效,以强制刷新凭据。 我不关心能够直接访问特定于会话的用户数据。 理想情况下,我也可以通过类似的方式将用户限制为一个会话。

我尝试做的是使用用户名作为键创建一个HashMap,并使用HttpSession作为值(我的实际设置稍微复杂一些,但在重复看似无法解释的失败之后,我将其归结为这个简单的测试)。 但是,每当我试图告诉检索到的HttpSession无效时,它似乎使当前的[admin]会话无效。 HttpSession是否与当前请求密不可分?

或者有一种完全不同的方式来处理这个问题?

如果它碰巧重要,我正在使用Jetty 6.1.26。

没有直接的方式。 我能想到的最简单的方法是在数据库(或cahche)上保留一个标志,并检查每个请求的有效性。

或者,您可以实现HTTP会话侦听器并保留可以访问和无效的用户会话的HashMap。

我没有尝试过任何这些,所以我不知道任何性能问题。 但对大多数应用来说应该是可以接受的。

好吧,据我所知,没有办法绕过它。 使用请求范围的bean并没有像我预期的那样工作(尽管它确实让我对Spring的运行方式有了很好的了解,拦截了字段访问)。 我最终在我的SessionHandler(会话范围的bean)上使用脏标志,并且具有非常高优先级的方面检查,并且如果需要,在用户的下一个请求中调用会话上的invalidate()。 我仍然最终让我的所有SessionHandler都注册了一个SessionManager,并使用@PreDestroy方法取消注册它们,以避免地图中出现一堆空条目。