web-dev-qa-db-ja.com

Spring Security:GrantedAuthoritiesを設定する

Authentication/UserDetailsImplオブジェクトにList<GrantedAuthority>を設定する方法はありますか?私のアプリケーションでは、2つのセキュリティレイヤーがあります。1つはログイン用(カスタムログイン認証システムを使用し、クラスではAuthenticationを使用してUsernamePasswordAuthenticationTokenを設定します)と1つは "ユーザーが特定の質問に答えるように求められるチャレンジ質問」。

私がやりたいことは、ユーザーがチャレンジ質問に答えた後、ログインプロセス中に作成された現在のList<GrantedAuthority>GrantedAuthorityを追加することです。

これは可能ですか?

21
mpmp

あなたは次のコードでそれを行うことができます:

Collection<SimpleGrantedAuthority> oldAuthorities = (Collection<SimpleGrantedAuthority>)SecurityContextHolder.getContext().getAuthentication().getAuthorities();
SimpleGrantedAuthority authority = new SimpleGrantedAuthority("ROLE_ANOTHER");
List<SimpleGrantedAuthority> updatedAuthorities = new ArrayList<SimpleGrantedAuthority>();
updatedAuthorities.add(authority);
updatedAuthorities.addAll(oldAuthorities);

SecurityContextHolder.getContext().setAuthentication(
        new UsernamePasswordAuthenticationToken(
                SecurityContextHolder.getContext().getAuthentication().getPrincipal(),
                SecurityContextHolder.getContext().getAuthentication().getCredentials(),
                updatedAuthorities)
);
28
ziggear