Comment puis-je supprimer le ROLE_ préfixe du Printemps de Sécurité avec JavaConfig?

J'essaie de retirer le "ROLE_" préfixe au Printemps de Sécurité. La première chose que j'ai essayé était:

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

Qui n'a pas fonctionné, j'ai donc essayé de créer un BeanPostProcessor comme suggéré dans http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html#m3to4-role-prefixing-disable. Qui n'a pas fonctionné non plus.

Enfin, j'ai essayé de créer mon propre 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;
  }

Toutefois, cela ne fonctionne pas non plus. Si j'utilise "hasAuthority(roleName)" au lieu de hasRole, il fonctionne comme prévu.

Est-il possible de supprimer le ROLE_ préfixe du Printemps de Sécurité de l'hasRole vérifier?

Étrange le BeanPostProcessor fonctionne pour moi (vous avez le déclarer comme une static méthode d'haricot et inclus la PriorityOrdered de sorte qu'il s'exécute très tôt?) et de même pour le gestionnaire d'expression. Nous avons également une DefaultMethodSecurityExpressionHandlerDefaultMethodSecurityExpressionHandler` configurée avec l'ensemble de préfixes la null.
Oui, j'ai copié le code de la BeanPostProcessor directement à partir de la documentation. J'ai essayé de mettre le @Bean dans mon @Configuration classe pour le Printemps de Sécurité et dans mon @SpringBootApplication classe. J'ai ajouté un System.out.println pour s'assurer qu'il est configuré avant le Printemps de la Sécurité. hasAuthority fonctionne comme prévu, donc je pense que je vais l'utiliser à la place.
Nous avons dans un non de printemps de l'application de démarrage. Pourrait-elle être celle qui est atteinte ou que la sécurité de démarrage est en quelque sorte encore configuré auparavant?

OriginalL'auteur Matt Raible | 2016-06-30