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

xkftehaa  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(237)

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中的示例:

  1. @Component
  2. class InvalidQValuesFilter : WebFilter {
  3. override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
  4. val acceptHeader = exchange.request.headers[HttpHeaders.ACCEPT]
  5. if (acceptHeader?.any { it.contains("*/*;q=2") } == true) {
  6. exchange.request.mutate().headers { headers ->
  7. headers[HttpHeaders.ACCEPT] = acceptHeader.map {
  8. it.replace("*/*;q=2", "*/*;q=0.1")
  9. }
  10. }
  11. }
  12. return chain.filter(exchange)
  13. }
  14. }

字符串

展开查看全部

相关问题