import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
字符串
我有
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) {
KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
SimpleAuthorityMapper grantedAuthorityMapper = new SimpleAuthorityMapper();
型
如果我用这句话
grantedAuthorityMapper.setDefaultAuthority("ROLE_ADMIN");
型
然后我可以访问我的API端点。但是,如果我使用这两行:
List<GrantedAuthority> grantedAuthorityList = AuthorityUtils.createAuthorityList("ROLE_ADMIN", "ROLE_USER");
grantedAuthorityMapper.mapAuthorities(grantedAuthorityList);
型
则无法访问我的API端点。
我认为mapAuthorities
方法不起作用,或者我错过了一些东西,或者我做错了一些事情。
这是最后两行:
keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(grantedAuthorityMapper);
auth.authenticationProvider(keycloakAuthenticationProvider);
}
型
2条答案
按热度按时间puruo6ea1#
下面的代码
字符串
实际上将
ROLE_ADMIN
设置为默认权限,当keycloakAuthenticationProvider
Map经过身份验证的用户的权限时,该默认权限将始终添加到Map的权限列表中。身份验证提供程序实际上会为此调用
mapAuthorities
。下面两行没有效果,因为
mapAuthorities
返回的Map权限没有被重用:型
您不应该直接使用
grantedAuthorityMapper
,它应该由身份和身份验证提供程序用于Map用户的权限。sy5wg1nm2#
可能是,你需要添加:
字符串
到你的(控制器)类?