ForwardedHeaderFilter不再支持IPv6



将spring引导版本升级到2.4.9后,spring引导应用程序仅在ipv4下工作正常,但在ipv6下抛出错误。该应用程序部署在谷歌云运行服务上。当前版本:

<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>spring-cloud-gcp-dependencies</artifactId>
<version>2.0.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.9</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

错误:

java.lang.IllegalArgumentException: Invalid IPv4 address: 2409:4042:2319:a971:c4db:4661:939c:443b
at org.springframework.web.util.UriComponentsBuilder.parseForwardedFor(UriComponentsBuilder.java:363)
at org.springframework.web.filter.ForwardedHeaderFilter$ForwardedHeaderExtractingRequest.<init>(ForwardedHeaderFilter.java:246)
at org.springframework.web.filter.ForwardedHeaderFilter.doFilterInternal(ForwardedHeaderFilter.java:149)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190)

我能找到一个类似的问题,但没有找到任何解决方案。https://github.com/spring-projects/spring-framework/issues/26748

抛出错误的代码行https://github.com/spring-projects/spring-framework/blob/6c68419073b43fb29114a3af4e402c729084ed84/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java L363

这个问题是由于谷歌云运行服务不尊重RFC7239标准,而不是由于春季启动。云运行无法用引号和方括号括起IPv6地址(根据RFC7239标准),因为spring将其解释为IPv4地址,并且在解析地址的端口号时失败。

这是非常奇怪的,谷歌云没有遵循标准。截至今天,谷歌云计算团队表示他们正在修复,但不能保证具体时间。

你可以在这里跟踪状态:https://issuetracker.google.com/issues/184230536?pli=1

最新更新