springSecurityFilterChain - ObjectPostProcessor является обязательным исключением бина - PullRequest
0 голосов
/ 09 ноября 2018

Я создаю приложение Spring Boot с помощью Spring Security (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]
...

Мой класс приложения состоит из следующего:

@SpringBootApplication
public class CustomPropertiesApplication {

    public static void main(String[] args) {
        SpringApplication.run(CustomPropertiesApplication.class, args);
    }
}

Кажется, что проблема в следующем классе.Если это исключено, приложение будет загружаться без ошибок.

@Configuration
@EnableWebSecurity
public class MyConfig extends WebSecurityConfigurerAdapter {

    @Bean
    public CustomPropertyPlaceholderConfigurer propertyConfigurer(ApplicationContext context) {
        return new CustomPropertyPlaceholderConfigurer();
    }

}

Прямо сейчас этот класс CustomPropertyPlaceholderConfigurer ничего не делает, у меня есть некоторые унаследованные классы, которые похожи, но при попытке устранить эту проблему я удалил все остальное из своегоТестовое приложение.

public class CustomPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer {
}

Я не знаю, что делать дальше.В Spring Security и Spring Boot я искал подробности о создании настраиваемого конфигуратора-заполнителя свойств, но не нашел ничего полезного.

Версии: Spring Boot - 2.1.0.RELEASE |Spring Security - 5.1.1.RELEASE |JDK 1.8

Кроме того, я понимаю, что это приложение на самом деле ничего не делает, есть гораздо более крупное приложение с гораздо более сложной логикой, и этот пример приложения здесь просто для того, чтобы повторить мою проблему, чтобы сделать ее небольшой дляStackOverflow.

1 Ответ

0 голосов
/ 10 ноября 2018

Теперь я вижу, что в моих выходных журналах был правильный ответ, и я просто не смог его увидеть.

o.s.c.a.ConfigurationClassEnhancer: метод @Bean MyConfig.propertyConfigurer не является статическим и возвращает объект, назначаемый интерфейсу Spring BeanFactoryPostProcessor. Это приведет к ошибке при обработке аннотаций, таких как @Autowired, @Resource и @PostConstruct, в объявлении метода класса @Configuration. Добавьте модификатор static к этому методу, чтобы избежать проблем с жизненным циклом контейнера; см. @Bean javadoc для полной информации.

Добавление статики в мой компонент решило проблему.

...