如何通过有关在服务器上销毁spring会话的消息通知浏览器中的客户端?
在教育应用程序中使用的技术:服务器端具有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中找到答案。
最佳答案
这可能不是您正在寻找的解决方案,但在我看来,针对您的特定问题,最简单,侵入性最小的解决方案将是每个页面都包含一个javascript代码(如果您使用Tiles,则可以将其放在模板),每隔x
秒通过AJAX轮询服务器;只要开始接收AccessDeniedException,就意味着该会话已过期,并且在网页上可以看到合适的消息。会话期满的机会很小,并且用户尝试在轮询产生AccessDeniedException之前尝试执行一些操作-javascript代码应该捕获用户操作导致的异常,并可视化同一条消息。
关于javascript - 在浏览器中通知客户端有关销毁服务器上的Spring Session的信息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40037461/