我在我的项目中使用Spring Session 1.3.0和Redis后端。
我有一个用例,超级管理员可能会更新可能已登录的现有用户的角色。我想在更改角色后删除这些用户的现有会话记录。
是否有Spring会话的API来存档它?
答案 0 :(得分:3)
@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();
}
}
}
}
}
答案 1 :(得分:2)
还要找出另一种方法来清理特定用户的会话
@Autowired
FindByIndexNameSessionRepository sessionRepository;
sessionRepository.findByIndexNameAndIndexValue(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME,
username).keySet().forEach(session -> sessionRepository.delete((String) session));