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

Posted

技术标签:

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

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

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

SecurityContextHolder.getContext().setAuthentication(updatedAuthentication);

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

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

【问题讨论】:

【参考方案1】:

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

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


【讨论】:

以上是关于春季安全删除用户 - 会话仍处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章

春季安全会话到期

在春季安全中注销特定会话ID

xxx 的副本已从模块树中删除,但仍处于活动状态

春季/安全中的自定义会话超时

存在-db restxq 触发器:服务已删除但仍处于活动状态

春季安全会话超时