当我使用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
答案 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)
答案 3 :(得分:-2)
该示例应用程序(https://github.com/spring-cloud-samples/sample-gateway-oauth2login)为oauth2集成提供了很好的参考,还包括通过使用@EnableWebFluxSecurity为响应模型提供下游微服务实现。我可以毫无问题地运行它。但是我们如何将其应用于非反应性模型?
我关注了另一个使用Zuul网关的微服务示例应用程序(https://github.com/piomin/sample-spring-oauth2-microservices)。通过将@EnableResourceServer添加到微服务中,执行器端点(/ health)被阻止并且无法注册到领事。