1

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

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

还是有完全不同的方法来处理这个问题?

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

4

2 回答 2

1

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

或者您可以实现一个 HTTP 会话监听器并保留一个可以访问和失效的用户会话的 HashMap。

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

于 2012-12-10T08:14:42.067 回答
0

好吧,据我所知,没有办法解决它。使用请求范围的 bean 并没有像我预期的那样工作(尽管它确实让我很好地了解了 Spring 如何操作,拦截字段访问)。我最终在我的 SessionHandler(一个会话范围的 bean)上使用了一个脏标志,并进行了非常高优先级的方面检查,并在必要时在用户的下一个请求中对会话调用 invalidate()。我最终还是让我的所有 SessionHandlers 注册到一个 SessionManager 和一个 @PreDestroy 方法来取消注册它们以避免映射中的一堆空条目。

于 2012-12-21T03:19:38.797 回答