Spring Boot Sping Boot :解决方法无效的客户端Accept标头

xkftehaa  于 5个月前  发布在  Spring
关注(0)|答案(1)|浏览(128)

Prometheus的最新版本在抓取请求的Accept头中向/actuator/prometheus发送了一个无效的q=2值。参见https://github.com/prometheus/prometheus/issues/13268。这会导致406 Not Acceptable的响应,因为Sping Boot 无法正确解析Accept头。
有没有办法解决这个问题,直到它是固定的上游?

w3nuxt5m

w3nuxt5m1#

使用Spring WebFlux,可以使用WebFilter修改入站请求,使其有效。Kotlin中的示例:

@Component
class InvalidQValuesFilter : WebFilter {
  override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
    val acceptHeader = exchange.request.headers[HttpHeaders.ACCEPT]
    if (acceptHeader?.any { it.contains("*/*;q=2") } == true) {
      exchange.request.mutate().headers { headers ->
        headers[HttpHeaders.ACCEPT] = acceptHeader.map {
          it.replace("*/*;q=2", "*/*;q=0.1")
        }
      }
    }

    return chain.filter(exchange)
  }
}

字符串

相关问题