如何通过有关服务器上的destroy spring session的消息在浏览器中通知客户端?
在教育使用技术申请中:Spring Framework
Spring Security
,Spring Session
和Spring Data Rest
位于服务器端,HTML5
位于Knockout.JS
客户端。会话超时设置为30分钟。
用户故事: 用户已获得授权,并开始填写新文档。 他没有保存就离开了工作。 回来,当会话结束,并且没有收到任何消息时,继续在表单中输入数据。 用户单击以保存文档并收到一条消息,指出会话已销毁。输入的数据丢失:0(
应用Websocket技术是不可能的,因为通道被锁定企业代理服务器内容过滤。
也许有必要关联HttpSessionEvent
和DeferredResult
(chat example by Rossen Stoyanchev)。
我有实现HttpSessionListener.sessionDestroyed (HttpSessionEvent event)
用于记录结束会话。
我认为有一个现成的模式可以解决此类任务,但我没有在文档Spring Session和Spring Security - Session Management中找到答案。
答案 0 :(得分:1)
这可能不是您正在寻找的解决方案,但在我看来,对于您的特定问题最简单且侵入性最小的解决方案将是一个javascript代码,包含在每个页面上(如果你使用Tiles,你可以放它在模板中),每隔x
秒通过AJAX轮询服务器;一旦开始接收AccessDeniedException,就意味着会话已过期,并在网页上显示合适的消息。会话过期的可能性很小,并且用户在轮询结果导致AccessDeniedException之前尝试执行某些操作 - javascript代码应该捕获用户操作产生的异常,并可视化相同的消息。