Spring boot использует облачный шлюз с Oauth2

Моя проблема - безопасность Cloudgateway с Oauth2. Однако конфигурация Oauth2 @EnableOAuth2Sso вызовет следующую ошибку:

Описание:

Для параметра 0 метода modifyRequestBodyGatewayFilterFactory в org.springframework.cloud.gateway.config.GatewayAutoConfiguration требуется bean-компонент типа org.springframework.http.codec.ServerCodecConfigurer, который не удалось найти.

Действие:

Рассмотрите возможность определения bean-компонента типа «org.springframework.http.codec.ServerCodecConfigurer» в вашей конфигурации.

Когда я сделал то же самое с прокси Zuul на Eureka, все работало нормально. Пожалуйста, помогите мне, как решить эту проблему.

Это проект Cloudgateway, и я пытаюсь сделать его клиентом Oauth2:

Конфигурация:

@Configuration
@EnableOAuth2Sso
public class UiSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/**")
                .authorizeRequests()
                .antMatchers("/", "/login**")
                .permitAll()
                .anyRequest()
                .authenticated();
    }
}

приложение.yml:

server:
  port: 8080
  servlet:
    session:
      cookie:
        name: UISESSION
security:
  oauth2:
    client:
      clientId: SampleClientId
      clientSecret: secret
      accessTokenUri: http://localhost:8085/auth/oauth/token
      userAuthorizationUri: http://localhost:8085/auth/oauth/authorize
    resource:
      userInfoUri: http://localhost:8085/auth/principal
spring:
  application:
    name: gateway
  cloud:
    gateway:
      discovery:
         locator:
             enabled: false

      routes:
      - id: microservice1WelcomeRoute
        uri: http://localhost:8083/view/welcome
        predicates:
            - Path=/microservice1/welcome

Я использую сервер Oauth2 по модели кода авторизации, ссылаясь на этот вопрос:


person Silver Light    schedule 02.08.2018    source источник
comment
Возможно, вы захотите узнать о stackoverflow.com /questions/49795385/ и связанная проблема   -  person Ryan Dawson    schedule 17.08.2018


Ответы (1)


Spring Cloud Gateway зависит от Spring Webflux (который использует веб-сервер Netty), Spring Cloud OAuth2 зависит от Spring Boot Web (который использует веб-сервер Tomcat) ... Оба веб-сервера нельзя использовать одновременно!

График зависимостей (только то, что имеет значение):

1)

* org.springframework.cloud:spring-cloud-starter-gateway:2.0.1.RELEASE
|-* org.springframework.boot:spring-boot-starter-webflux:2.0.5.RELEASE
  |-* org.springframework.boot:spring-boot-starter-reactor-netty:2.0.5.RELEASE

2)

* org.springframework.cloud:spring-cloud-starter-oauth2:2.0.0.RELEASE
|-* org.springframework.cloud:spring-cloud-starter-security:2.0.0.RELEASE
  |-*org.springframework.cloud:spring-cloud-security:2.0.0.RELEASE
    |-*org.springframework.boot:spring-boot-starter-web:2.0.5.RELEASE
      |-*org.springframework.boot:spring-boot-starter-tomcat:2.0.5.RELEASE

Таким образом, если вы исключите зависимость Tomcat, это, вероятно, сработает...

например (для градиента)

dependencies {
    // ...
    implementation('org.springframework.cloud:spring-cloud-starter-gateway')
    implementation('org.springframework.cloud:spring-cloud-starter-oauth2') {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat'
    }
    // ...
    testImplementation('org.springframework.boot:spring-boot-starter-test')
}
person Marcelo C.    schedule 12.10.2018