欢迎访问优讯网!
您当前的位置:首页 > 爱编程

Spring Cloud Gateway 和 OAuth2 不兼容的问题

时间:2019-10-09 08:07:21  来源:优讯网  作者:小卡司  浏览次数:
问题版本
Spring Cloud 版本 : Finchley.RELEASE

Oauth2 版本 : 2.0.0.RELEASE

Spring 版本 : 5.0.7.RELEASE

错误描述
在 Spring Cloud Gateway 与 OAuth2 的整合过程中遇到启动错误

如下:

2019-10-09 01:16:27.235 ERROR 18320 --- [ost-startStop-1] o.s.b.web.embedded.tomcat.
TomcatStarter  : Error starting Tomcat context. Exception: org.springframework.beans.fac
tory.BeanCreationException. Message: Error creating bean with name 'servletEndpointRe
gistrar' defined in class path resource [org/springframework/boot/actuate/autoconfigure
/endpoint/web/ServletEndpointManagementContextConfiguration$WebMvcServletEndp
ointManagementContextConfiguration.class]: Bean instantiation via factory method failed;
nested exception is org.springframework.beans.BeanInstantiationException: Failed to
instantiate [org.springframework.boot.actuate.endpoint.web.ServletEndpointRegistrar]:
Factory method 'servletEndpointRegistrar' threw exception; nested exception is org.
springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean
with name 'gatewayControllerEndpoint' defined in class path resource [org/
springframework/cloud/gateway/config/GatewayAutoConfiguration$Gateway
ActuatorConfiguration.class]: Unsatisfied dependency expressed through method
'gatewayControllerEndpoint' parameter 2; nested exception is org.springframework
.beans.factory.UnsatisfiedDependencyException: Error creating bean with name
'modifyRequestBodyGatewayFilterFactory' defined in class path resource [org/
springframework/cloud/gateway/config/GatewayAutoConfiguration.class]: Unsatisfied
dependency expressed through method 'modifyRequestBodyGatewayFilterFactory'
parameter 0; nested exception is org.springframework.beans.factory.NoSuchBean
DefinitionException: No qualifying bean of type 'org.springframework.http.codec.
ServerCodecConfigurer' available: expected at least 1 bean which qualifies as
autowire candidate. Dependency annotations: {}
2019-10-09 01:16:27.280  INFO 18320 --- [           main] o.apache.catalina.core.
StandardService   : Stopping service [Tomcat]
2019-10-09 01:16:27.287  WARN 18320 --- [ost-startStop-1] o.a.c.loader.
WebappClassLoaderBase       : The web application [ROOT] appears to have
started a thread named [reactor-http-nio-1] but has failed to stop it. This is
very likely to create a memory leak. Stack trace of thread:
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
 sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
 sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
 sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
 io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
 io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:756)
 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:411)
 io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
 java.lang.Thread.run(Thread.java:748)
2019-10-09 01:16:27.287  WARN 18320 --- [ost-startStop-1] o.a.c.loader.WebappClassLoaderBase     
 : The web application [ROOT] appears to have started a thread named [reactor-http-nio-2]
but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
 sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
 sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
 sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
 io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
 io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:756)
 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:411)
 io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
 java.lang.Thread.run(Thread.java:748)
2019-10-09 01:16:27.288  WARN 18320 --- [ost-startStop-1] o.a.c.loader.WebappClassLoaderBase
       : The web application [ROOT] appears to have started a thread named [reactor-http-nio-3]
but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
 sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
 sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
 sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
 io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
 io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:756)
 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:411)
 io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
 java.lang.Thread.run(Thread.java:748)
2019-10-09 01:16:27.288  WARN 18320 --- [ost-startStop-1] o.a.c.loader.WebappClassLoaderBase
       : The web application [ROOT] appears to have started a thread named [reactor-http-nio-4]
but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
 sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
 sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
 sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
 io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
 io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:756)
 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:411)
 io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
 java.lang.Thread.run(Thread.java:748)
2019-10-09 01:16:27.291  WARN 18320 --- [ost-startStop-1] o.a.c.loader.WebappClassLoaderBase 
     : The web application [ROOT] appears to have started a thread named [reactor-http-nio-5]
but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
 sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
 sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
 sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
 io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
 io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:756)
 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:411)
 io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
 java.lang.Thread.run(Thread.java:748)
2019-10-09 01:16:27.292  WARN 18320 --- [ost-startStop-1] o.a.c.loader.WebappClassLoaderBase
       : The web application [ROOT] appears to have started a thread named [reactor-http-nio-6]
but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
 sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
 sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
 sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
 io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
 io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:756)
 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:411)
 io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
 java.lang.Thread.run(Thread.java:748)
2019-10-09 01:16:27.293  WARN 18320 --- [ost-startStop-1] o.a.c.loader.WebappClassLoaderBase
       : The web application [ROOT] appears to have started a thread named [reactor-http-nio-7]
but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
 sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
 sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
 sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
 io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
 io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:756)
 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:411)
 io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
 java.lang.Thread.run(Thread.java:748)
2019-10-09 01:16:27.294  WARN 18320 --- [ost-startStop-1] o.a.c.loader.WebappClassLoaderBase
       : The web application [ROOT] appears to have started a thread named [reactor-http-nio-8]
but has failed to stop it. This is very likely to create a memory leak. Stack trace of thread:
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(Native Method)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
 sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
 sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
 sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
 sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
 io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
 io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:756)
 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:411)
 io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:884)
 java.lang.Thread.run(Thread.java:748)
2019-10-09 01:16:27.300  WARN 18320 --- [           main] ConfigServletWebServerApplicationContext :
Exception encountered during context initialization - cancelling refresh attempt: org.springframework.
context.ApplicationContextException: Unable to start web server; nested exception is org.springframe
work.boot.web.server.WebServerException: Unable to start embedded Tomcat
2019-10-09 01:16:27.320  INFO 18320 --- [           main] ConditionEvaluationReportLoggingListener : 

Error starting ApplicationContext. To display the conditions report re-run your application
with 'debug' enabled.
2019-10-09 01:16:27.635 ERROR 18320 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method modifyRequestBodyGatewayFilterFactory in org.springframework.
cloud.gateway.config.GatewayAutoConfiguration required a bean of type 'org.springfram
ework.http.codec.ServerCodecConfigurer' that could not be found.


Action:

Consider defining a bean of type 'org.springframework.http.codec.ServerCodecConfigurer'
in your configuration.
你遇到的情况有可能和我稍有不同

官方解答
问题描述ISSUES : https://github.com/spring-cloud/spring-cloud-gateway/issues/478

官方解答ISSUES : https://github.com/spring-cloud/spring-cloud-security/issues/141

简单来说是 Spring Security 和 Spring Cloud Gateway 不兼容的问题.

解决方法有二:
1. 放弃整合,在Gateway中实现自己的鉴权方式
2. 将 Spring Security 升级为 5.1.X
此处有新版本解决方案实例 : https://github.com/artemMartynenko/spring-cloud-gateway
-oauth2-sso-sample-application

题外话

开源框架的版本真是永远也追不上,不要盲目追求新版本

最优的技术是能稳定支撑自己业务的技术,而不是最新的技术.

以上就是关于 Spring Cloud Gateway 和 OAuth2 不兼容的问题 的全部内容了,喜欢的小伙伴别忘了点赞分享一下哦,关注优讯网,优讯有你更精彩!
转载自: https://my.oschina.net/u/4196104/blog/3114575
版权归原作者所有,如有侵权请联系我们删除。
来顶一下
返回首页
返回首页
推荐资讯
计算机的正确使用姿势 电脑痴如何正确的使用电脑
计算机的正确使用姿势
好用的后台管理的前端框架模版H-ui H-ui框架模版分享
好用的后台管理的前端
微信电脑多开方法 无需辅助电脑版微信双开方法分享
微信电脑多开方法 无
Python实现网站百度主动推送 python实现主动推送网站地图
Python实现网站百度主
相关文章
栏目更新
栏目热门