Spring Security:设置GrantedAuthorities

mpm*_*pmp 21 security authentication spring

无论如何设置List<GrantedAuthority>在Authentication/UserDetailsImpl对象中?在我的应用程序中,我有两层安全性,一个用于登录(使用我的自定义登录验证器,在类中我使用设置Authentication对象UsernamePasswordAuthenticationToken)和一个用于"挑战问题",其中提示用户回答特定题.

我想要做的是在用户回答质询问题后,在登录过程中创建GrantedAuthority的当前时间添加一个List<GrantedAuthority>.

这可能吗?

zig*_*ear 26

您可以使用以下代码执行此操作:

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)
);
Run Code Online (Sandbox Code Playgroud)

  • 令人毛骨悚然的是,只有当您知道安全上下文中存在的身份验证类型(在这种情况下为UsernamePasswordAuthenticationToken)时,它才起作用。 (2认同)