如何按特定主体名称删除现有会话

Kan*_*ane 3 spring spring-security redis spring-boot spring-session

我在我的项目中使用带有 Redis 后端的 Spring Session 1.3.0。

我有一个用例,超级管理员可能会更新可能已经登录的现有用户的角色。我想在更改角色后删除这些用户的现有会话记录。

是否有 Spring Session 的 API 来归档它?

Kan*_*ane 6

还想出另一种方法来清理特定用户的会话,

@Autowired
FindByIndexNameSessionRepository sessionRepository;

sessionRepository.findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME,
                username).keySet().forEach(session -> sessionRepository.delete((String) session));
Run Code Online (Sandbox Code Playgroud)


mir*_*sif 5

    @Autowired
    private SessionRegistry sessionRegistry;

    public void expireUserSessions(String username) {
        for (Object principal : sessionRegistry.getAllPrincipals()) {
            if (principal instanceof User) {
                UserDetails userDetails = (UserDetails) principal;
                if (userDetails.getUsername().equals(username)) {
                    for (SessionInformation information : sessionRegistry.getAllSessions(userDetails, true)) {
                        information.expireNow();
                    }
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)