SimpleGrantedAuthority

SimpleGrantedAuthority

无论如何,是否可以在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)
);

10-07 20:39