2010-03-17 77 views
1

我使用spring + tapestry进行身份验证webuser。我不知道是否有任何技术我可以强制当前登录的所有用户注销让我说我的场景是“维护模式下的场景”强制所有会话注销

p/s:它能够强制所有用户“正在运行的进程完成,只有强制注销

回答

1

的问题是试图让他们完成的要求,然后才登陆出来。我假设他们如果在表单上保存,您希望保存数据,但应将其重定向到维护页面。对于GET请求,如果设置了维护标志,则可以将用户注销。 POST很难实现,因为您想完成请求,但签署并将其重定向到维护页面。我会尝试一个请求过滤器。像正常一样处理请求,但然后使会话无效并在设置维护标志时使用response.sendRedirect。

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

+0

@ya,javascript的事情会很好 – cometta 2010-03-18 01:03:55

4

两件事情,我想起:

  • 使用HttpSessionListener跟踪所有的会话,并在时机成熟时它们无效。要使用此功能,您需要在ServletContext(或不太优选 - 作为静态字段)中使用SetSession对象。每当创建或销毁会话时更新Set,并在需要失效时迭代集合。

  • 使用Filter(映射到/*)其中,如果满足某些条件(maintenance == true),则使当前会话无效。因此,所有用户都将在下一次操作中注销。这在“维护模式”不意味着“停止整个服务器”的情况下工作,而是意味着“不应该由用户执行操作,我在不应该受到干扰的背景中做重要事情”

+0

@Bozho我喜欢你的想法 – cometta 2010-03-17 09:17:19

+0

第二个是不是一种选择,你必须等待下一个动作或为超时。超时意味着会话已经摧毁了当时强制的内容。而第一种选择,我不明白它会有什么帮助。它只有2个方法将在特定事件中被调用。它将如何强制注销,我不知道。在会话被破坏时执行一些操作可能会有帮助,但那不是问题。 – 2010-03-17 09:31:38

+0

@Adeel Ansari第二个选项可用于保护模式并不意味着“停止服务器”,而是“停止所有用户操作”的情况。我有过类似的情况。 第一个选项 - 我说“保持跟踪” - 这意味着要在创建时存储对每个会话的引用(最好在静态变量或servletContext中),并在需要时访问它们。 – Bozho 2010-03-17 09:43:39