美好的一天同事。 尝试使用不同的变体,但没有发生任何事情。
我有一个代码,其中是下一个方法:
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 _”
我试过了:
使用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.不同的自定义类也不起作用。
我的问题是如何获得没有前缀ROLE _的所有角色。
答案 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()
。