次のコードでそれを行うことができます。これに明確にする
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)
);
ことの一つは、UserDetailsの実装が何であるかのクラスです。 SpringにはUserDetailsImplというクラスはありません。 JdbcDaoImplはUserクラスのインスタンスを作成し、LDAPバージョンはLdapUserDetailsImplのインスタンスを作成します。したがって、実際にどのタイプのオブジェクトに依存するかは、権限を変更できるかどうかに大きく依存しています。当然のことながら、Spring提供のUserDetails実装の1つを、権限を与えられた権限セットの不変なセットのようなもののために使用したことはありません。 –