无论如何,是否可以在Authentication / UserDetailsImpl对象中设置List<GrantedAuthority>
?在我的应用程序中,我有两层安全性,一层用于登录(使用我的自定义登录身份验证器,在该类中,我使用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)
);