如何配置ROLE前缀Spring Security

时间:2018-04-13 14:51:51

标签: java spring spring-security active-directory

美好的一天同事。 尝试使用不同的变体,但没有发生任何事情。

我有一个代码,其中是下一个方法:

public List<String> getUserRoles() {

        List<String> roles = new ArrayList<>();
        for (GrantedAuthority authority : SecurityContextHolder.getContext().getAuthentication().getAuthorities()) {
            roles.add(authority.getAuthority().toUpperCase());
        }

        return roles;
    }

我希望从Active Directory获取所有用户身份验证,但只能使用前缀“ROLE _”

我试过了:

  1. 使用application.yaml + code(yaml中的前缀== null):

    方法(AbstractContextSource ldapContext,                                 AuthenticationManagerBuilder构建器)...

    builder.ldapAuthentication()
           .ldapAuthoritiesPopulator(populator)
           .contextSource(ldapContext)
           .userSearchFilter(userSearchFilter)
           .userSearchBase(userSearchBase)
           .groupSearchBase(groupSearchBase)
           .groupSearchFilter(groupSearchFilter)
           .rolePrefix(rolePrefix);
    

    它不起作用。

  2. 2.不同的自定义类也不起作用。

    我的问题是如何获得没有前缀ROLE _的所有角色。

1 个答案:

答案 0 :(得分:1)

如果您使用public class HomeController : Controller { [Authorize] public IActionResult GetYourWebApiMethod(){ return new ObjectResult(new { Username = User.Identity.Name }); } } 进行授权,则有两种方法:

Javaconfig

hasRole

XML配置

@Bean
    public DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler() {
        DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();
        defaultWebSecurityExpressionHandler.setDefaultRolePrefix("");
        return defaultWebSecurityExpressionHandler;
}

或者您可以使用<beans:bean id="expressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler"> <beans:property name="defaultRolePrefix" value="" /> </beans:bean> 代替hasAuthority()。执行检查时,前一个不会添加hasRole()