首页 > 解决方案 > 为什么 SimpleAuthorityMapper 的 mapAuthorities 方法在 Spring Securit 中不起作用?

问题描述

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);
}

标签: javaspring-bootspring-securitykeycloak

解决方案


可能是,您需要添加:

@Secured({ "ROLE_USER", "ROLE_ADMIN"})

到你的(控制器)类?


推荐阅读