【问题标题】:Spring security delete user - session still active春季安全删除用户 - 会话仍处于活动状态
【发布时间】:2016-11-12 17:29:03
【问题描述】:

我得到了一个带有用户管理的简单 Spring Security 应用程序。 管理员应该能够在数据库上创建/更新/删除用户(通过休眠)。

如果用户更新,我正在重新加载当前登录用户的身份验证。这是通过以下代码完成的(根据this 示例):

SecurityContextHolder.getContext().setAuthentication(updatedAuthentication);

我的问题是: 如果用户被删除,我该怎么办?如果我删除用户,已经活动会话保持活动状态,我不知道如何更新它们。我仍然可以导航到我之前能够访问的每个页面。

有没有办法告诉 spring 会话应该重新验证或类似的东西?我错过了什么重要的事情吗?

【问题讨论】:

    标签: java spring spring-mvc session spring-security


    【解决方案1】:

    对于每个请求,您都应该检查数据库中是否存在用户。 步骤:

    1. 从会话中获取用户ID,检查它是否在数据库中。
    2. 如果不在数据库中,则使会话无效并再次重定向到登录页面。
    3. 将以上两个步骤包装在一个方法中,并在每个请求时调用它。 (如果有通用方法,请使用该方法或创建 e Listener)

    如果有帮助,您还可以查看以下链接。 http://forum.spring.io/forum/spring-projects/security/35809-how-to-let-admin-to-force-user-to-logout

    另一个有用的链接是http://docs.spring.io/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#list-authenticated-principals

    【讨论】:

      【解决方案2】:

      SecurityContextRepository

      从 Spring Security 3.0 开始,加载和存储安全上下文的工作现在委托给单独的策略接口

      您可以提供NullSecurityContextRepository 以避免存储安全上下文信息。

      我做了这样的事情:

      @EnableWebSecurity
      public class CustomSecurityConfiguration extends WebSecurityConfigurerAdapter {
      
          @Override
          protected void configure(HttpSecurity http) throws Exception {
      
              // Other security configuration...
      
              http.securityContext().securityContextRepository(new NullSecurityContextRepository());
          }
      
      }
      

      【讨论】:

        猜你喜欢
        • 2014-10-08
        • 2012-02-17
        • 2011-06-21
        • 2013-11-29
        • 1970-01-01
        • 2022-01-23
        • 1970-01-01
        • 2017-09-15
        相关资源
        最近更新 更多