1

我正在使用 spring+tapestry 来验证网络用户。我想知道是否有任何技术可以强制所有当前登录的用户注销让我说我处于网站处于“维护模式”的场景

p/s: 是否能够强制所有用户的运行进程完成并且只强制注销

4

2 回答 2

4

我想到了两件事:

  • 用于HttpSessionListener跟踪所有会话并在时机成熟时使它们失效。要使用它,您将需要一个Set对象SessionServletContext或者不太优选 - 作为静态字段)。Set每当创建或销毁会话时更新它,并在需要失效时迭代集合。

  • 使用 a Filter(mapped to /*) 如果满足某些条件 ( maintenance == true),则使当前会话无效。因此,所有用户都将在他们的下一个操作中注销。这适用于“维护模式”并不意味着“停止整个服务器”,而是意味着“用户不应该执行任何操作,我正在后台做一些不应该被干扰的重要事情”的情况

于 2010-03-17T09:00:26.180 回答
1

问题是试图让他们完成请求,然后才将它们注销。我假设如果他们在表单上点击保存,您希望保存数据,但他们应该被重定向到维护页面。对于 GET 请求,如果设置了维护标志,您只需将用户注销即可。POST 有点困难,因为您想完成请求,然后将它们注销并将它们重定向到维护页面。我会尝试一个请求过滤器。像平常一样处理请求,但如果设置了维护标志,则使会话无效并使用 response.sendRedirect。

另一种选择是在布局中使用 JavaScript 计时器 - 定期点击页面以查看它们是否应该被注销。不过,这可能不会让他们完成当前的请求。

于 2010-03-17T15:41:32.620 回答