Spring Boot:解决客户端接受标头无效的问题

问题描述 投票:0回答:1

Prometheus 的最新版本会在抓取请求的

q=2
标头中向
Accept
发送无效的
/actuator/prometheus
值。请参阅https://github.com/prometheus/prometheus/issues/13268。这会导致
406 Not Acceptable
响应,因为 Spring Boot 无法正确解析
Accept
标头。

有没有办法解决这个问题,直到上游得到解决?

spring-boot prometheus spring-boot-actuator
1个回答
0
投票

使用 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)
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.