我的问题是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
答案 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')
}