带有 Spring Boot 应用程序的 Jetty 9.4.21 出现 TypeCast 错误

Posted

技术标签:

【中文标题】带有 Spring Boot 应用程序的 Jetty 9.4.21 出现 TypeCast 错误【英文标题】:Jetty 9.4.21 with Spring Boot applications getting TypeCast error 【发布时间】:2020-02-10 06:35:44 【问题描述】:

Jetty 9.4.21:升级后,我们面临以下问题

错误 org.springframework.boot.web.servlet.support.ErrorPageFilter - 由于异常 [org.springframework.web.servlet.resource.ResourceUrlEncodingFilter$ResourceUrlEncodingRequestWrapper 无法转换,从请求 [/index.jsp] 转发到错误页面到 org.eclipse.jetty.server.Request] java.lang.ClassCastException: org.springframework.web.servlet.resource.ResourceUrlEncodingFilter$ResourceUrlEncodingRequestWrapper 无法转换为 org.eclipse.jetty.server.Request

完整的日志如下图: 错误 org.springframework.boot.web.servlet.support.ErrorPageFilter - 由于异常 [org.springframework.web.servlet.resource.ResourceUrlEncodingFilter$ResourceUrlEncodingRequestWrapper 无法转换为 org.springframework.web.servlet.resource.ResourceUrlEncodingRequestWrapper 从请求 [/index.jsp] 转发到错误页面。 eclipse.jetty.server.Request] java.lang.ClassCastException: org.springframework.web.servlet.resource.ResourceUrlEncodingFilter$ResourceUrlEncodingRequestWrapper 无法转换为 org.eclipse.jetty.server.Request 在 org.eclipse.jetty.servlet.ServletHolder$NotAsyncServlet.service(ServletHolder.java:1395) 在 org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:760) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1617) 在 ch.qos.logback.classic.helpers.MDCInsertingServletFilter.doFilter(MDCInsertingServletFilter.java:49) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) 在 org.springframework.web.servlet.resource.ResourceUrlEncodingFilter.doFilter(ResourceUrlEncodingFilter.java:63) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) 在 org.springframework.boot.actuate.web.trace.servlet.HttpTraceFilter.doFilterInternal(HttpTraceFilter.java:90) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) 在 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:209) 在 org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357) 在 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) 在 org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) 在 org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) 在 org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) 在 org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:130) 在 org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66) 在 org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:105) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:123) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) 在 org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.filterAndRecordMetrics(WebMvcMetricsFilter.java:117) 在 org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:106) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) 在 org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 在 org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604) 在 org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) 在 org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) 在 org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235) 在 org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1589) 在 org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233) 在 org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1296) 在 org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188) 在 org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485) 在 org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1559) 在 org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186) 在 org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1211) 在 org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) 在 org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:221) 在 org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146) 在 org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173) 在 org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127) 在 org.eclipse.jetty.server.Server.handle(Server.java:500) 在 org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:386) 在 org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:560) 在 org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:378) 在 org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:268) 在 org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311) 在 org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103) 在 org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117) 在 org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336) 在 org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) 在 org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171) 在 org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) 在 org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:367) 在 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782) 在 org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:914) 在 java.lang.Thread.run(Thread.java:748)

请注意,此错误仅发生在带有 Jetty 9.4.21 的 Spring Boot 应用程序中 与 Jetty 9.4.20 相同的 Spring Boot 应用程序工作正常。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

这是 Jetty 9.4.21 中的一个错误。

见https://github.com/eclipse/jetty.project/issues/4141

返回 9.4.20 或等待 9.4.22

【讨论】:

以上是关于带有 Spring Boot 应用程序的 Jetty 9.4.21 出现 TypeCast 错误的主要内容,如果未能解决你的问题,请参考以下文章

带有 spring-boot 和 angularjs 的 CORS 不起作用

带有 MVC 的 Spring Boot SOAP Web 服务

带有 spring-boot 和 spring-security 的 JWT

运行带有嵌入式容器和 JNDI 的 Spring Boot 应用程序

带有 Spring Boot 中所需的显式 basePackages 的 IntegrationComponentScan?

带有休眠应用程序的 Spring Boot 无法启动