spring - 如何使 Spring Security 中的其他用户 session 过期

标签 spring spring-security spring-security-oauth2

我是 Spring Security 的新手,我遇到过期用户 session 的问题。
在我的应用程序中,有 ROLE_ADMIN 的管理员,他们可以更改其他用户的角色。

我想终止其权限被管理员更改的用户的 session 。
我发现我可以通过使用 SessionRegistry 获取所有登录的用户 session 。

我检查了我是否可以使用 sessionRegistry.getAllSessions() 获取所有 SessionInformation,并尝试使用以下代码使 session 信息过期。

List<SessionInformation> sessionInformations = sessionRegistry.getAllSessions(allPrincipals.get(i), false);

for (SessionInformation information : sessionInformations) {
    information.expireNow();
    sessionRegistry.removeSessionInformation(information.getSessionId());
}

allPrincipals.set(i, new AccountUserAdaptor(requestedAccount));

我认为上面的代码足以使特定其他用户的 session 过期。
但是在 SecurityContextPersistenceFilter 中,身份验证从我认为已经过期的 session 中恢复。

我用 request.getSession() 检查过我可以获得我认为已经过期的有效 session 。甚至 information.getSessionId()request.getSession() 中的 SessionID 是相同的。

我想知道为什么 session 没有过期。

我正在使用 Spring(不是 Spring-Boot)

最佳答案

如果您使用spring-sessionjdbc 或redis,您可以使用此代码清除任何用户的 session 。 Autowiring 此依赖项

@Autowired
private FindByIndexNameSessionRepository<? extends Session> sessionRepo;

传递您要清除 session 的用户的电子邮件/用户名。

Set<String> sessionIds = sessionRepo
                .findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME, userEmail)
                .keySet();

if (sessionIds.size() > 0) {
    log.debug("existing sessions: {}", sessionIds.size());
    for (String sessionId : sessionIds) {
        sessionRepo.deleteById(sessionId);
    }
}

关于spring - 如何使 Spring Security 中的其他用户 session 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61693535/

相关文章:

spring - 如何验证数据源有效且配置正确?

spring - 使用 Javassist 将代码注入(inject)方法

java - Spring 4如何定时刷新ConcurrentMapCache?

java - 使用 Java 的 gRPC 中的 OAuth

Spring MVC : how to indicate whether a path variable is required or not?

spring - 禁用Spring Security/login/auth并明确定义所有内容?

rest - 如何在 Spring Boot Web 应用程序中保护 REST API?

grails - ipRestrictions在Grails 3.3.10中不起作用?

java - Spring Security - 授权服务器的主体与资源服务器不同