Spring Boot通过Oauth2使用Cloud Gateway

时间:2018-08-02 02:42:17

标签: java spring-boot oauth-2.0 spring-security-oauth2 spring-cloud-gateway

我的问题是Oauth2的Cloudgateway安全性。但是,Oauth2的配置@ EnableOAuth2Sso将导致以下错误:

说明:

org.springframework.cloud.gateway.config.GatewayAutoConfiguration中方法ModifyRequestBodyGatewayFilterFactory的参数0需要找不到类型为“ org.springframework.http.codec.ServerCodecConfigurer”的bean。

操作:

考虑在您的配置中定义类型为“ org.springframework.http.codec.ServerCodecConfigurer”的bean。

=>当我在Eureka上对Zuul代理执行相同操作时,一切正常。 请帮我解决这个问题...

这是Cloudgateway项目,我正在尝试使其成为Oauth2客户端:

配置:

windows or macos or linux

application.yml:

@Configuration
@EnableOAuth2Sso
public class UiSecurityConfig extends WebSecurityConfigurerAdapter {

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

我正在通过授权码模型使用Oauth2服务器。您可以在这里参考: Spring Boot using Oauth2 Grant: Resource Owner Password Credentials flow or Client Credentials flow

1 个答案:

答案 0 :(得分:2)

Spring Cloud Gateway依赖于Spring Webflux(使用Netty Web Server), Spring Cloud OAuth2依赖于Spring Boot Web(使用Tomcat Web Server)...两个Web服务器不能同时使用!

依赖图(仅重要的内容):

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依赖项,它可能会起作用...

例如(用于gradle)

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')
}