【发布时间】:2015-07-03 13:39:28
【问题描述】:
我有一个应用程序,我们希望通过以特定频率访问端点来实现一些“实时”轮询。但是,此更新不需要刷新会话,因此会话可以在不是此轮询的最后一个操作中超时。
有没有办法排除某些路由更新用户会话到期,但仍需要用户会话进行身份验证?
【问题讨论】:
标签: java tomcat spring-security
我有一个应用程序,我们希望通过以特定频率访问端点来实现一些“实时”轮询。但是,此更新不需要刷新会话,因此会话可以在不是此轮询的最后一个操作中超时。
有没有办法排除某些路由更新用户会话到期,但仍需要用户会话进行身份验证?
【问题讨论】:
标签: java tomcat spring-security
如果“刷新”请求带有jsessionid 令牌,会话将自动刷新。因此,您必须只对端点进行未经身份验证的(即没有jsessionid)请求。
那么,您如何将此请求与没有会话 ID 的现有用户联系起来?
您可以向请求添加标头,其中包含足够的信息来识别服务器端的用户(例如,JWT 令牌)。 HttpFilter 可以保护端点并基于此令牌执行身份验证。
现在,还有另一个问题。
为了确定这个特定用户是否有可用的新数据,我假设端点必须查询用户的状态。如果该状态完全存储在用户的HttpSession 中,那么你就完蛋了——它不能以编程方式访问,只能通过jsessionid 来访问,这会刷新超时。
这里的解决方案是将用户的数据(或至少与实时数据相关的数据)外部化到另一个存储系统(内存中的 Map、Redis 缓存、Oracle 或 MongoDB 数据库...... )。
这确实需要相当多的工作......
【讨论】: