【问题标题】:how to programmatically invalidate a session using spring security如何使用spring security以编程方式使会话无效
【发布时间】:2015-05-15 07:47:37
【问题描述】:

我的应用程序的某些用户可以在固定的最长时间内使用它。在过期时间之后发生的第一个请求时,在检查用户是目标组的一部分后,我想使会话无效,更新用户并返回 401。

理论上,可以为此使用调用会话后验证的 servlet 过滤器。我正在寻找有关如何使用 Spring Security 执行此操作的指示。

谢谢!

【问题讨论】:

  • 在检查用户是否属于目标组之后,在过期时间之后发生的第一个请求是什么意思?您想在此处检查什么以及在当前情况下检查后会发生什么?另外,请您帮忙检查一下您的 spring 安全配置文件和部分吗?
  • 这是我想要实现的目标:在每个(经过身份验证的)请求中,都会检索与主体相关的信息,用于确定该主体是否受到上述会话到期的影响(即在目标),如果是,则检查用户的年龄,如果年龄超过限制,则使会话无效。
  • 该应用未使用任何 Spring Security 配置 文件。使用 WebSecurityConfigurer 实例以编程方式实现配置(请参阅docs.spring.io/autorepo/docs/spring-security/4.0.0.M1/apidocs/…)。我希望能够通过在会话验证后指定在每个请求上调用的处理程序/过滤器来扩展此配置。但我很难找到相关文档。

标签: session spring-security invalidation


【解决方案1】:

虽然您当然可以添加一个普通的 servlet 过滤器,该过滤器在链的最末端(或至少在 Spring Security 过滤器堆栈之后)执行,您可以在其中获取 SecurityContext 并检查用户(可能像注销用户一样thisthis),我建议您改为简单地根据每个用户更改会话持续时间。成功登录后(AuthenticationSuccessHandler 是个好地方),您可以简单地在会话上调用setMaxInactiveInterval,并根据用户的角色为其赋予不同的值。这对我来说似乎更干净,因为您不必单独处理语义上相等的 actualforced 会话到期/注销情况。

【讨论】:

  • 感谢您的跟进。在这种情况下,我不在乎用户是否处于活动状态。我只是希望能够在一定时间后阻止用户访问。我最终在所有控制器调用的用户解析实用程序中实现了检查。
猜你喜欢
  • 1970-01-01
  • 2013-04-27
  • 2021-12-11
  • 2021-02-06
  • 2014-05-23
  • 1970-01-01
  • 2014-10-15
  • 2014-04-17
  • 2011-11-28
相关资源
最近更新 更多