反正是有设置List<GrantedAuthority>
在认证/ UserDetailsImpl对象? 在我的应用程序,我有两种安全层,一个用于记录(使用我的自定义登录认证,设定在I类Authentication
使用对象UsernamePasswordAuthenticationToken
)一个用于“挑战问题”,并在提示用户来回答一个特定的问题。
我想要做的就是添加GrantedAuthority
到当前List<GrantedAuthority>
这是在登录过程中创建的,用户应答挑战的问题后。
这可能吗?
你可以用下面的代码做到这一点:
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.getAuthorities()
方法只返回一个Collection<GrantedAuthority>
对象。 您可以使用适当的Collection
方法,以新的机构添加到该集合。
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {
((UserDetails) principal).getAuthorities().add(New GrantedAuthorityImpl("ROLE_FOO"));
}
细拉。