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
.
我有这个字体
@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
.