JavaConfig を使用して Spring Security から ROLE_ プレフィックスを削除するにはどうすればよいですか? 質問する

JavaConfig を使用して Spring Security から ROLE_ プレフィックスを削除するにはどうすればよいですか? 質問する

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>

おすすめ記事