春季安全删除用户 - 会话仍处于活动状态
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());
【讨论】:
以上是关于春季安全删除用户 - 会话仍处于活动状态的主要内容,如果未能解决你的问题,请参考以下文章