2016-06-16 75 views
0

我有2個用戶角色ADMINUSERADMIN可以更改USER的密碼。當用戶的密碼更改爲ADMIN時,我想強制註銷。我可以保存更改的密碼並在下次登錄時使用它們。但我想強制註銷他們。彈出密碼更改時的安全強制登出

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

這是行不通的。

回答

1

首先,你需要在你的安全配置,以配置會話配置如下

@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();; 
    } 
} 
+0

明白了。它將在所有會話中搜索用戶的會話。我對嗎? – fatiherdem

+0

正確。試試並讓我知道你的結果。 – Rejinderi

+0

謝謝。這是工作! – fatiherdem