springSecurityFilterChain - ObjectPostProcessor 是必需的 bean 异常
springSecurityFilterChain - ObjectPostProcessor is a required bean Exception
我正在构建一个 Spring 具有 Spring 安全性的引导应用程序(spring-boot-starter-web 和 spring-boot-starter-security)。我在启动期间从我的应用程序收到以下错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.IllegalStateException: org.springframework.security.config.annotation.ObjectPostProcessor is a required bean. Ensure you have used @EnableWebSecurity and @Configuration
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:625) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:455) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
...
我的申请 class 包含以下内容:
@SpringBootApplication
public class CustomPropertiesApplication {
public static void main(String[] args) {
SpringApplication.run(CustomPropertiesApplication.class, args);
}
}
下一个 class 中的 bean 似乎是问题所在。如果它被排除,那么应用程序将无错误地启动。
@Configuration
@EnableWebSecurity
public class MyConfig extends WebSecurityConfigurerAdapter {
@Bean
public CustomPropertyPlaceholderConfigurer propertyConfigurer(ApplicationContext context) {
return new CustomPropertyPlaceholderConfigurer();
}
}
现在这个 CustomPropertyPlaceholderConfigurer class 什么都不做,我有一些类似的遗留 classes,但是为了解决这个问题,我从我的测试应用程序中删除了所有其他东西。
public class CustomPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
}
我不知道接下来要尝试什么。我在 Spring 安全和 Spring 引导中查找有关构建自定义 属性 占位符配置器的详细信息,但我没有找到任何有用的信息。
版本:Spring 启动 - 2.1.0.RELEASE | Spring 安全 - 5.1.1.RELEASE | JDK1.8
另外,我意识到这个应用程序并没有真正做任何事情,有一个更大的应用程序有更复杂的逻辑,这里的这个示例应用程序只是为了复制我的问题,使它对于 Whosebug 来说更小。
我现在看到我的输出日志中的答案是正确的,只是我没有看到它。
o.s.c.a.ConfigurationClassEnhancer : @Bean 方法 MyConfig.propertyConfigurer 是非静态的 和 returns 一个可分配给 Spring 的对象BeanFactoryPostProcessor 接口。这将导致无法在方法声明的@Configuration class 中处理@Autowired、@Resource 和@PostConstruct 等注释。在此方法中添加 'static' 修饰符以避免这些容器生命周期问题;有关完整详细信息,请参阅@Bean javadoc。
向我的 bean 添加 static 解决了这个问题。
我正在构建一个 Spring 具有 Spring 安全性的引导应用程序(spring-boot-starter-web 和 spring-boot-starter-security)。我在启动期间从我的应用程序收到以下错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'springSecurityFilterChain' defined in class path resource [org/springframework/security/config/annotation/web/configuration/WebSecurityConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [javax.servlet.Filter]: Factory method 'springSecurityFilterChain' threw exception; nested exception is java.lang.IllegalStateException: org.springframework.security.config.annotation.ObjectPostProcessor is a required bean. Ensure you have used @EnableWebSecurity and @Configuration
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:625) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:455) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288) ~[spring-beans-5.1.2.RELEASE.jar:5.1.2.RELEASE]
...
我的申请 class 包含以下内容:
@SpringBootApplication
public class CustomPropertiesApplication {
public static void main(String[] args) {
SpringApplication.run(CustomPropertiesApplication.class, args);
}
}
下一个 class 中的 bean 似乎是问题所在。如果它被排除,那么应用程序将无错误地启动。
@Configuration
@EnableWebSecurity
public class MyConfig extends WebSecurityConfigurerAdapter {
@Bean
public CustomPropertyPlaceholderConfigurer propertyConfigurer(ApplicationContext context) {
return new CustomPropertyPlaceholderConfigurer();
}
}
现在这个 CustomPropertyPlaceholderConfigurer class 什么都不做,我有一些类似的遗留 classes,但是为了解决这个问题,我从我的测试应用程序中删除了所有其他东西。
public class CustomPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
}
我不知道接下来要尝试什么。我在 Spring 安全和 Spring 引导中查找有关构建自定义 属性 占位符配置器的详细信息,但我没有找到任何有用的信息。
版本:Spring 启动 - 2.1.0.RELEASE | Spring 安全 - 5.1.1.RELEASE | JDK1.8
另外,我意识到这个应用程序并没有真正做任何事情,有一个更大的应用程序有更复杂的逻辑,这里的这个示例应用程序只是为了复制我的问题,使它对于 Whosebug 来说更小。
我现在看到我的输出日志中的答案是正确的,只是我没有看到它。
o.s.c.a.ConfigurationClassEnhancer : @Bean 方法 MyConfig.propertyConfigurer 是非静态的 和 returns 一个可分配给 Spring 的对象BeanFactoryPostProcessor 接口。这将导致无法在方法声明的@Configuration class 中处理@Autowired、@Resource 和@PostConstruct 等注释。在此方法中添加 'static' 修饰符以避免这些容器生命周期问题;有关完整详细信息,请参阅@Bean javadoc。
向我的 bean 添加 static 解决了这个问题。