Spring Boot Security 如何获取里面的角色 "Principal"

Springboot Security how to get role inside "Principal"

我有这个字体

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/login").permitAll()
            .antMatchers("/**").hasRole("myRole")
            .anyRequest().authenticated()
            .and()
            .oauth2Login(Customizer.withDefaults());
}

我知道“hasRole”在 securityContext.authentication.authorities 中查看权限,但是有没有办法让“hasRole”到另一个地方?

我的角色在里面 securityContext.authentication.principal.attributes.role : https://i.stack.imgur.com/yl6bC.png

我什至创建了一个 returns 如果我想要的角色存在的端点,但我不知道它在“配置”方法中对我有何帮助:

public boolean isAllowed() {
    UserAttributesDTO user = getUser();
    if (nonNull(user)) {
        return user.getRoles().stream().anyMatch(role -> role.equals("admin_cadastro_externo"));
    }
    return false;
}

由于您使用的是 built-in oauth2Login() 并且您的委托人是 DefaultOidcUser,因此您想改用 .hasAuthority("myAuthority")。您可以通过提供 GrantedAuthoritiesMapper as an @Bean.

来影响存在的权限

如果您必须就地访问属性,您可能会对 .access(...) 使用 @Bean 引用感兴趣。

参见 Referring to Beans in Web Security Expressions。在这种情况下,您应该使用传递给方法的 authentication 而不是 SecurityContextHolder 来访问 authentication.