Spring安全删除用户 - 会话仍处于活动状态

时间:2016-07-10 19:08:54

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

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

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

SecurityContextHolder.getContext().setAuthentication(updatedAuthentication);

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

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

2 个答案:

答案 0 :(得分:1)

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

  1. 从会话中获取用户ID,检查它是否在数据库中。
  2. 如果数据库中没有,则会话无效并再次重定向到登录页面。
  3. 在方法中包含上面两个stpes并在每个请求上调用它。 (如果使用常用方法或创建e Listener)
  4. 如果有帮助,您也可以查看以下链接。 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

答案 1 :(得分:0)

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());
    }

}