gpt4 book ai didi

spring - 如何使用 JavaConfig 从 Spring Security 中删除 ROLE_ 前缀?

转载 作者:IT老高 更新时间:2023-10-28 13:44:53 29 4
gpt4 key购买 nike

我正在尝试删除 Spring Security 中的“ROLE_”前缀。我尝试的第一件事是:

http.servletApi().rolePrefix("");

这不起作用,所以我尝试按照 http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html#m3to4-role-prefixing-disable 中的建议创建一个 BeanPostProcessor .那也没用。

最后,我尝试创建自己的SecurityExpressionHandler:

  @Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.expressionHandler(webExpressionHandler())
.antMatchers("/restricted").fullyAuthenticated()
.antMatchers("/foo").hasRole("mycustomrolename")
.antMatchers("/**").permitAll();
}

private SecurityExpressionHandler<FilterInvocation> webExpressionHandler() {
DefaultWebSecurityExpressionHandler defaultWebSecurityExpressionHandler = new DefaultWebSecurityExpressionHandler();
defaultWebSecurityExpressionHandler.setDefaultRolePrefix("");
return defaultWebSecurityExpressionHandler;
}

但是,这也不起作用。如果我使用“hasAuthority(roleName)”而不是 hasRole,它会按预期工作。

是否可以从 Spring Security 的 hasRole 检查中删除 ROLE_ 前缀?

最佳答案

从 Spring 4.2 开始,您可以使用单个 bean 定义前缀,如下所述:https://github.com/spring-projects/spring-security/issues/4134

@Bean
GrantedAuthorityDefaults grantedAuthorityDefaults() {
return new GrantedAuthorityDefaults(""); // Remove the ROLE_ prefix
}

XML 版本:

<beans:bean id="grantedAuthorityDefaults" class="org.springframework.security.config.core.GrantedAuthorityDefaults">
<beans:constructor-arg value="" />
</beans:bean>

关于spring - 如何使用 JavaConfig 从 Spring Security 中删除 ROLE_ 前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38134121/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com