Spring Security で「ROLE_」プレフィックスを削除しようとしています。最初に試したことは次のとおりです。
http.servletApi().rolePrefix("");
それはうまくいかなかったので、BeanPostProcessor
提案されたように作成してみましたhttp://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html#m3to4-role-prefixing-disable。それもうまくいきませんでした。
最後に、自分で作成してみました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_ プレフィックスを削除することは可能ですか?
ベストアンサー1
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>