Чего не хватает в моей защищенной конфигурации реактивного приложения Spring? - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь создать защищенное (JWT) реактивное (webflow) приложение с весенней загрузкой, но не могу его запустить.

Я создал вспомогательное приложение сервлета с такими же компонентами и аналогичными Конфигурация, которая работает нормально, но, похоже, что-то отсутствует в моем конфе и не может понять, что.

@SpringBootApplication(scanBasePackageClasses = { ReactiveApp.class, GreetingHandler.class, GreetingRouter.class,
        MessageService.class, MessageServiceImpl.class })
public class ReactiveApp {
    public static void main(String[] args) {
        SpringApplication.run(ReactiveApp.class, args);
    }

    @EnableWebFluxSecurity
    @EnableReactiveMethodSecurity
    public class ReactiveSecurityConfig {

        @Value("${spring.security.oauth2.resourceserver.jwt.issuer-uri}")
        String issuerUri;

        @Bean
        public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
            // @formatter:off
            http.csrf().disable().httpBasic().disable().formLogin().disable();
            http.authorizeExchange().pathMatchers("/secret-endpoint").hasAnyRole("AUTHORIZED_PERSONNEL").anyExchange()
                    .authenticated();
            http.oauth2ResourceServer().jwt().jwtAuthenticationConverter(authExtractor());
            // @formatter:on

            return http.build();
        }

        @Bean
        ReactiveJwtDecoder jwtDecoder() {
            return ReactiveJwtDecoders.fromOidcIssuerLocation(issuerUri);
        }

        @Bean
        public AuthenticationConverter authExtractor() {
            KeycloackOidcIdAuthenticationConverter extractor = new KeycloackOidcIdAuthenticationConverter() {
            };
            return jwt -> Mono.just(jwt).map(extractor::convert);
        }
    }

    private static interface AuthenticationConverter extends Converter<Jwt, Mono<AbstractAuthenticationToken>> {
    }

}

Журналы минимальны: /

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.4.RELEASE)

2020-02-12 18:47:23.975  INFO 13320 --- [           main] c.c.s.sample.reactive.ReactiveApp        : Starting ReactiveApp on LAPTOP-JEREM with PID 13320 (C:\Users\jwacongne\dev\workspaces\libs\spring-addons\spring-security-test-keycloack-addons\target\test-classes started by jwacongne in C:\Users\jwacongne\dev\workspaces\libs\spring-addons\spring-security-test-keycloack-addons)
2020-02-12 18:47:23.978  INFO 13320 --- [           main] c.c.s.sample.reactive.ReactiveApp        : No active profile set, falling back to default profiles: default
2020-02-12 18:47:25.091  INFO 13320 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8090 (https)
2020-02-12 18:47:25.109  INFO 13320 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-02-12 18:47:25.110  INFO 13320 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.30]
2020-02-12 18:47:25.259  INFO 13320 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-02-12 18:47:25.260  INFO 13320 --- [           main] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1238 ms
2020-02-12 18:47:26.054  INFO 13320 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-02-12 18:47:26.234  WARN 13320 --- [           main] ConfigServletWebServerApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jwtDecoderWebSecurityConfigurerAdapter': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.security.config.annotation.ObjectPostProcessor<?>' available
2020-02-12 18:47:26.235  INFO 13320 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Shutting down ExecutorService 'applicationTaskExecutor'
2020-02-12 18:47:26.237  INFO 13320 --- [           main] o.apache.catalina.core.StandardService   : Stopping service [Tomcat]
2020-02-12 18:47:26.249  INFO 13320 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-02-12 18:47:26.386 ERROR 13320 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

A component required a bean of type 'org.springframework.security.config.annotation.ObjectPostProcessor' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.security.config.annotation.ObjectPostProcessor' in your configuration.

Во время отладки я можно увидеть исключение со следующим сообщением: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jwtDecoderWebSecurityConfigurerAdapter': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.security.config.annotation.ObjectPostProcessor<?>' available

Spring-boot версия: 2.2.4

...