2016-06-16 18 views
0

私は2人のユーザーロールADMINUSERを持っています。 ADMINUSERのパスワードを変更できます。ユーザーのパスワードがADMINで変更されたときに強制的にログアウトしたい私は変更されたパスワードを保存して、次のログイン時に使用することができます。しかし、私は彼らにログアウトを強制したい。パスワードの変更時に春のセキュリティ強制ログアウト

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

これは機能しません。これは、あなたがアクティブなセッションのリストを管理し、それらを期限切れにするsessionRegistry.getAllSessionsを呼び出すことができます

@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 
} 

次のように

答えて

1

まず、あなたのセキュリティ設定の下でセッション構成を設定する必要があります。 SessionRegistryはFYIをautowiredです。

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

関連する問題