当前位置: 首页 > 知识库问答 >
问题:

通过注销使Spring Security会话失效

胡意致
2023-03-14

只是一个关于Spring Security性和会话失效的问题。

当会话被ConcurrentSessionControlStrategy无效时,会话将通过调用removeSessionInformation方法从SessionRegistry中移除;然而,当会话被手动注销无效时,HttpSession也会无效,但不会调用SessionRegistry从那里移除条目。

我添加了HttpSessionEventPublisher作为侦听器,它捕获HttpSessionDestroyedEvent事件,但同样没有调用SessionRegistry。

顺便说一下,这使用的是Spring Security 3.1.0。

共有1个答案

洪飞驰
2023-03-14

我也有同样的问题。在我的例子中,解决方案是将SessionRegistry创建为一个单独的spring bean。ConcurrentSessionControlStrategy保存到注册表的链接,因此可以直接从注册表中删除无效的会话。但是SecurityContextLogouthHandler使用Session.invalidate(),所以SessionDestroyservlet事件由servlet容器提供给HttpSessionEventPublisher,但是HttpSessionDestroyDevent发布到Spring上下文的HttpSessionEventPublisherSessionRegistry

安全配置不起作用:

...
SessionRegistry sessionRegistry = new SessionRegistryImpl();
ConcurrentSessionControlStrategy concurrentSessionControlStrategy = new ConcurrentSessionControlStrategy(sessionRegistry);
...

这个很好用:

@Bean
public SessionRegistry sessionRegistry() {
    return new SessionRegistryImpl();
}
...
ConcurrentSessionControlStrategy concurrentSessionControlStrategy = new ConcurrentSessionControlStrategy(sessionRegistry())
...

 类似资料:
  • 我尝试了几乎所有我能在StackOverflow和其他地方找到的东西来让它工作,但它仍然不工作。我使用的是Spring框架4.1.6。发布,Spring安全4.0.0。释放。我配置了命名空间注销标记,我能够使会话无效的唯一方法是通过在我的控制器中使用HttpSession.invalidate()调用以编程方式执行它。 当请求注销时,我会被重定向到相应的页面,但是会话不会失效,JSSessionI

  • 问题内容: 我们的应用程序在30分钟后注销并重定向到登录页面,我在web.xml中指定会话超时,并使用requestProcessor进行重定向。我想向用户显示一条消息,指出会话过期后会话已过期,如何我可以这样做吗?自动注销?我想在“会话超时,请重新登录”页面上提示错误消息。那我怎么能检测到会话超时呢?有什么方法会自动触发吗? 问题答案: 创建一个活动检查器,该检查器每分钟检查是否发生了任何用户活

  • 我正在学习springsecurity(基于java的配置),我无法使注销正常工作。当我点击注销时,我看到URL更改为http://localhost:8080/logout并获取“HTTP 404-/logout”。登录功能工作正常(即使使用自定义登录表单),但问题是注销,我怀疑重定向的url“localhost:8080/logout”应该类似于“localhost:8808/springte

  • 问题内容: 我有一个会话验证过滤器,当会话过期时该过滤器注销用户。 这是一段代码,但是没有用。不起作用意味着即使会话过期,它也不会重定向到登录页面。 请帮助我解决此问题。 问题答案: 我有一个会话验证过滤器,当会话过期时该过滤器注销用户。 老实说,这完全没有道理。如果将已登录用户存储为会话的属性,并基于会话中已登录用户的存在来拦截“已登录”状态,则在任何时候都不需要手动注销该用户。会话已过期。当会

  • 问题内容: 我在iOS应用中使用Firebase身份验证。当用户使用Firebase登录我的应用程序然后注销该用户的所有其他设备(会话)时,Firebase中是否有任何方法?我可以使用Firebase admin SDK来做到这一点吗? 问题答案: 当我遇到此问题时,我已使用云功能解决了该问题,请访问此链接以获取更多详细信息https://firebase.google.com/docs/auth

  • 问题内容: 我正在使用spring / spring-security 3.1,希望在用户注销(或会话超时)时采取一些措施。我设法完成了注销操作,但对于会话超时,我无法使其正常工作。 在web.xml中,仅指定了ContextLoaderListener(这可能是问题吗?),当然还有DelegatingFilterProxy。 我使用这样的自动配置。 当用户单击注销时,将调用注销处理程序,这将对数