如何解决ForwardedHeaderFilter 不再支持 IPv6
升级 spring boot 依赖项后,spring boot 应用程序仅对 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 标准而不是由于 Spring Boot。 Cloud run 无法将 IPv6 地址用引号和方括号括起来(根据 RFC7239 标准),因为 Spring 将其解释为 IPv4 地址并且在从地址解析端口号时失败。
很奇怪,谷歌云不符合标准。截至今天,Google 云团队表示他们正在修复此问题,但无法保证预计到达时间。
您可以在此处跟踪状态: https://issuetracker.google.com/issues/184230536?pli=1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。