使用带有 oauth2 的 spring 云网关
Posted
技术标签:
【中文标题】使用带有 oauth2 的 spring 云网关【英文标题】:use spring cloud gateway with oauth2 【发布时间】:2018-09-22 12:54:31 【问题描述】:我在使用 Spring Cloud Gateway 时遇到问题
是如果任何依赖直接或递归调用spring-boot-starter-tomcat
它不会工作,因为它会启动嵌入式tomcat服务器而不是spring cloud gateway使用的netty服务器
我开始通过排除这个依赖来解决这个问题
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
spring cloud 网关运行成功
但有时我想使用 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
【问题讨论】:
您找到解决方案了吗?我面临同样的问题 我也面临这个问题,在花了将近 2 天的时间后找不到任何东西......只是想知道这个问题是否以某种方式得到解决,是否有一些参考文件可以参考。 【参考方案1】:如您所见,Spring 云网关使用响应式模型并且基于 netty 而不是 tomcat。响应式更改是一个重大转变,目前 Spring Security 不支持,但工作正在进行中,您可以通过 https://github.com/spring-cloud/spring-cloud-gateway/issues/179 跟踪它
【讨论】:
我也面临这个问题,在花了将近 2 天的时间后找不到任何东西......只是想知道这个问题是否以某种方式得到解决,是否有一些可以参考的参考文件 【参考方案2】:使用以下依赖项(我从我的 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 结合使用,以便您了解它的实际工作原理。
【讨论】:
【参考方案3】:spring boot 2.1 和 spring security 5 已经解决了这个问题 看到这个example
【讨论】:
以上是关于使用带有 oauth2 的 spring 云网关的主要内容,如果未能解决你的问题,请参考以下文章
spring cloud gateway + oauth2 实现网关统一权限认证
如果下游服务响应 401,如何在 Zuul API 网关中触发 OAuth2 身份验证
调用spring oauth2授权服务器时Spring Cloud Gateway卡住
spring security oauth2认证中心 集成zuul网关的代码分析