我有2个用户角色ADMIN
和USER
。 ADMIN
可以更改USER
的密码。我希望在ADMIN
更改用户密码时强制退出。我可以保存更改的密码,并在下次登录时使用它们。但我想强制退出他们。
UserDetails userDetails = userDetailsService.loadUserByUsername(vendor.getUsername());
Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setAuthenticated(false);
这不起作用。
答案 0 :(得分:2)
首先,您需要在安全配置下配置会话配置,如下所示
@Override
protected void configure(HttpSecurity http) throws Exception {
// this enables ConcurrentSessionFilter to allow us to read all sessions by using getAllPrincipals
http
.sessionManagement().maximumSessions(10)
.sessionRegistry(sessionRegistry())
.expiredUrl("/login?expire");
// Rest of the configuration
}
这使您可以调用sessionRegistry.getAllSessions来管理活动会话列表并使它们到期。 SessionRegistry是自动装配的FYI。
List<Object> principals = sessionRegistry.getAllPrincipals();
for (Object principal: principals) {
// Check for the principal you want to expire here
List<SessionInformation> sessionInformations = sessionRegistry.getAllSessions(principal);
for (SessionInformation sessionInformation : sessionInformations) {
sessionInformation.expireNow();;
}
}