Spring Securityでユーザー更新時に権限をリロードする方法 質問する

Spring Securityでユーザー更新時に権限をリロードする方法 質問する

Spring Security を使用して OpenID による認証を行うアプリケーションを作成しています。ユーザーがログインすると、いくつかの権限がセッションにロードされます。

他のユーザーの権限を変更(取り消し、役割の追加)できる完全な権限を持つユーザーを持っています。私の質問は、ユーザーセッション権限を動的に変更するにはどうすればいいかということです。(使用できません)セキュリティコンテキストホルダー別のユーザー セッションを変更したいためです。

簡単な方法: ユーザー セッションを無効にしますが、その方法は? より良い方法: 新しい権限でユーザー セッションを更新します。その方法は?

ベストアンサー1

ログインしているユーザーの権限を動的に更新する必要がある場合(何らかの理由で権限が変更された場合)、もちろんログアウトしてログインする必要はありません。SpringAuthenticationでオブジェクト(セキュリティ トークン)をリセットするだけですSecurityContextHolder

例:

Authentication auth = SecurityContextHolder.getContext().getAuthentication();

List<GrantedAuthority> updatedAuthorities = new ArrayList<>(auth.getAuthorities());
updatedAuthorities.add(...); //add your role here [e.g., new SimpleGrantedAuthority("ROLE_NEW_ROLE")]

Authentication newAuth = new UsernamePasswordAuthenticationToken(auth.getPrincipal(), auth.getCredentials(), updatedAuthorities);

SecurityContextHolder.getContext().setAuthentication(newAuth);

おすすめ記事