在浏览器中通知客户端关于销毁服务器上的Spring Session?

时间:2016-10-14 07:32:19

标签: javascript rest spring-mvc spring-security spring-session

如何通过有关服务器上的destroy spring session的消息在浏览器中通知客户端?

在教育使用技术申请中:Spring Framework Spring SecuritySpring SessionSpring Data Rest位于服务器端,HTML5位于Knockout.JS客户端。会话超时设置为30分钟。

用户故事: 用户已获得授权,并开始填写新文档。 他没有保存就离开了工作。 回来,当会话结束,并且没有收到任何消息时,继续在表单中输入数据。 用户单击以保存文档并收到一条消息,指出会话已销毁。输入的数据丢失:0(

应用Websocket技术是不可能的,因为通道被锁定企业代理服务器内容过滤。

也许有必要关联HttpSessionEventDeferredResultchat example by Rossen Stoyanchev)。 我有实现HttpSessionListener.sessionDestroyed (HttpSessionEvent event)用于记录结束会话。

我认为有一个现成的模式可以解决此类任务,但我没有在文档Spring SessionSpring Security - Session Management中找到答案。

1 个答案:

答案 0 :(得分:1)

这可能不是您正在寻找的解决方案,但在我看来,对于您的特定问题最简单且侵入性最小的解决方案将是一个javascript代码,包含在每个页面上(如果你使用Tiles,你可以放它在模板中),每隔x秒通过AJAX轮询服务器;一旦开始接收AccessDeniedException,就意味着会话已过期,并在网页上显示合适的消息。会话过期的可能性很小,并且用户在轮询结果导致AccessDeniedException之前尝试执行某些操作 - javascript代码应该捕获用户操作产生的异常,并可视化相同的消息。