使用带有oauth2的spring cloud gateway

时间:2018-04-12 11:29:23

标签: java spring spring-oauth2 spring-cloud-gateway

  

当我使用spring cloud gateway

时,我遇到了问题      

是否有任何依赖直接或递归地调用spring-boot-starter-tomcat

     

它将无法工作,因为它将启动嵌入式tomcat服务器而不是Spring云网关使用的netty服务器

我开始通过排除这种依赖性来解决这个问题

        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
  

Spring云网关成功运作

     

但有时我想使用spring-cloud-starter-oauth2来使用@ EnableOAuth2Sso

我开始使用

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-oauth2</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
  

当时我面临着抛出异常的重大问题

     

引起:java.lang.IllegalStateException:无法在类org.springframework.security.oauth2.config.annotation.web.configuration.OAuth2ClientConfiguration上内省带注释的方法   ......

     

引起:java.lang.NoClassDefFoundError:javax / servlet / Filter

4 个答案:

答案 0 :(得分:2)

如您所见,Spring云网关使用反应模型,并且基于netty而不是tomcat。被动更改是一个重大转变,Spring Security目前不支持此更改,但有关工作正在进行中,您可以在https://github.com/spring-cloud/spring-cloud-gateway/issues/179

进行跟踪

答案 1 :(得分:0)

使用以下依赖项(我是从build.gradle复制的)

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
    implementation 'org.springframework.cloud:spring-cloud-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
}

至少按以下步骤对您的网关应用进行编码

@SpringBootApplication
public class App {

    @Bean
    public ForwardedHeaderTransformer forwardedHeaderTransformer() {
        return new ForwardedHeaderTransformer();
    }

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

在application.yml中配置

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: XXX
            client-secret: YYY

我正在积极构建将OAuth2与Docker Swarm Discovery https://github.com/trajano/spring-cloud-demo.git结合使用的堆栈,以便您了解其工作原理。

答案 2 :(得分:-1)

具有弹簧安全性5的Spring Boot 2.1已解决此问题 看到这个example

答案 3 :(得分:-2)

该示例应用程序(https://github.com/spring-cloud-samples/sample-gateway-oauth2login)为oauth2集成提供了很好的参考,还包括通过使用@EnableWebFluxSecurity为响应模型提供下游微服务实现。我可以毫无问题地运行它。但是我们如何将其应用于非反应性模型?

我关注了另一个使用Zuul网关的微服务示例应用程序(https://github.com/piomin/sample-spring-oauth2-microservices)。通过将@EnableResourceServer添加到微服务中,执行器端点(/ health)被阻止并且无法注册到领事。