为什么SimpleAuthorityMapper的mapAuthorities方法在Spring Security中不起作用?

8ftvxx2r  于 2024-01-06  发布在  Spring
关注(0)|答案(2)|浏览(149)
  1. import org.springframework.security.core.GrantedAuthority;
  2. import org.springframework.security.core.authority.AuthorityUtils;
  3. import org.springframework.security.core.authority.mapping.SimpleAuthorityMapper;
  4. import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;

字符串
我有

  1. @Autowired
  2. public void configureGlobal(AuthenticationManagerBuilder auth) {
  3. KeycloakAuthenticationProvider keycloakAuthenticationProvider = keycloakAuthenticationProvider();
  4. SimpleAuthorityMapper grantedAuthorityMapper = new SimpleAuthorityMapper();


如果我用这句话

  1. grantedAuthorityMapper.setDefaultAuthority("ROLE_ADMIN");


然后我可以访问我的API端点。但是,如果我使用这两行:

  1. List<GrantedAuthority> grantedAuthorityList = AuthorityUtils.createAuthorityList("ROLE_ADMIN", "ROLE_USER");
  2. grantedAuthorityMapper.mapAuthorities(grantedAuthorityList);


则无法访问我的API端点。
我认为mapAuthorities方法不起作用,或者我错过了一些东西,或者我做错了一些事情。
这是最后两行:

  1. keycloakAuthenticationProvider.setGrantedAuthoritiesMapper(grantedAuthorityMapper);
  2. auth.authenticationProvider(keycloakAuthenticationProvider);
  3. }

puruo6ea

puruo6ea1#

下面的代码

  1. grantedAuthorityMapper.setDefaultAuthority("ROLE_ADMIN");

字符串
实际上将ROLE_ADMIN设置为默认权限,当keycloakAuthenticationProviderMap经过身份验证的用户的权限时,该默认权限将始终添加到Map的权限列表中。
身份验证提供程序实际上会为此调用mapAuthorities
下面两行没有效果,因为mapAuthorities返回的Map权限没有被重用:

  1. List<GrantedAuthority> grantedAuthorityList = AuthorityUtils.createAuthorityList("ROLE_ADMIN", "ROLE_USER");
  2. grantedAuthorityMapper.mapAuthorities(grantedAuthorityList);


您不应该直接使用grantedAuthorityMapper,它应该由身份和身份验证提供程序用于Map用户的权限。

sy5wg1nm

sy5wg1nm2#

可能是,你需要添加:

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

字符串
到你的(控制器)类?

相关问题