我想通过利用spring SessionRegistry
来检索当前登录的用户。
我已经定义了bean并将其应用于会话管理,如下所示:
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.sessionManagement().maximumSessions(1).sessionRegistry(sessionRegistry());
}
@Bean
public SessionRegistry sessionRegistry() {
return new SessionRegistryImpl();
}
然后我创建了获取所有用户的方法:
@Autowired
private SessionRegistry sessionRegistry;
@Override
public List<String> getUsersFromSessionRegistry() {
return sessionRegistry.getAllPrincipals().stream()
.filter(u -> !sessionRegistry.getAllSessions(u, false).isEmpty())
.map(Object::toString)
.collect(Collectors.toList());
}
我在控制器中添加了一个方法,但它总是返回一个空列表
@GetMapping("/loggedUsersFromSessionRegistry")
public List<String> getLoggedUsersFromSessionRegistry() {
return userService.getUsersFromSessionRegistry();
}
答案 0 :(得分:0)
public List<String> getUsersFromSessionRegistry() {
return sessionRegistry.getAllPrincipals()
.stream()
.filter((u) -> !sessionRegistry.getAllSessions(u, false)
.isEmpty())
.map(o -> {
if (o instanceof User) {
return ((User) o).getEmail();
} else {
return o.toString();
}
})
.collect(Collectors.toList());
}
答案 1 :(得分:-1)
类似的东西:
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {
String username = ((UserDetails)principal).getUsername();
} else {
String username = principal.toString();
}