当某些类扩展WebSecurityConfigurerAdapter

时间:2017-02-07 09:24:40

标签: java spring spring-boot spring-security

有效Formatters注册的所需步骤是:

  1. 首先,位于addWebMvcConfigurers的方法WebMvcConfigurationComposite应该注册所有网络配置程序。这包括formatters
  2. 之后,当某个组件需要@Autowired ConversionService个实例时,位于mvcConversionService的方法WebMvcConfigurationSupport会获得ConversionService个实例并注册所有在返回实例之前就已存在formatters
  3. 但是,如果@Configuration类扩展了WebSecurityConfigurerAdapter抽象类,则某些组件在@Autowired注册之前尝试ConversionService formatters个实例在Spring上下文中,addFormatters方法不包含任何formatters

    我刚刚创建了以下使用Spring Boot重现此问题的概念证明:

    https://github.com/jcagarcia/proofs/tree/master/spring-security-and-formatters

    如果使用mvn compile spring-boot:run命令执行this proof of concept,则可以检查Create Pets视图是否显示枚举值,而不将转换应用于String。

    enter image description here

    似乎需要ConversionService实例的组件是ContentNegotiation中的@Autowired @Override

    简单的解决方法是@Autowired WebSecurityConfigurerAdapter类中的setContentNegotiationStrategy方法,而不包含mvn compile spring-boot:run注释。 (概念验证包括此解决方案)

    之后,使用Create Pets命令再次执行此概念验证,您可以检查ContentNegotiationStrategy视图是否显示应用了有效格式的枚举值。

    SecurityConfiguration

    我认为这不是最佳解决方案,因为@Autowired不再是SELECT distinct 1 products.id FROM products WHERE products.id = ?; 了。

    有关如何解决此问题的任何想法?

    随意检查概念证明并执行它以重现问题。

    最诚挚的问候,

0 个答案:

没有答案
相关问题