微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ForwardedHeaderFilter 不再支持 IPv6

如何解决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 举报,一经查实,本站将立刻删除。