密码更改时Spring Security强制注销

时间:2016-06-16 22:25:01

标签: spring spring-security spring-boot

我有2个用户角色ADMINUSERADMIN可以更改USER的密码。我希望在ADMIN更改用户密码时强制退出。我可以保存更改的密码,并在下次登录时使用它们。但我想强制退出他们。

UserDetails userDetails = userDetailsService.loadUserByUsername(vendor.getUsername());
Authentication authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authentication.setAuthenticated(false);

这不起作用。

1 个答案:

答案 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();;
    }
}