验证 Spring RestController 中的 HTTP-Header 字段

Validate a HTTP-Header field in a Spring RestController

我正在寻找一种方法来验证自定义 header 'X-Client-Id' 是否设置为发送到 [=27] 的 HTTP 请求中 Repository 中定义的值=] 在 SpringBoot 中。

我看到教程(如 this)在方法中包含 header,如下所示:@RequestHeader(value="User-Agent")。我假设我必须将该行写入每个方法并注入一个公共 validator-bean 来验证该值。

另一个 Whosebug answer 似乎建议使用 HandlerInterceptor。我不确定这是否适用于 header 值和 REST 端点。

那么验证 class/REST-controller 的所有方法是否设置了特定 header 的推荐方法是什么?

基本上最简单(也是最合乎逻辑)的方法是在请求到达您的控制器之前捕获它。这可以通过其他答案状态的 HandlerInterceptor 或像 OncePerRequestFilter.

这样的简单 Filter 来实现

扩展 class,覆盖 doFilterInternal() 方法,因为 doFilter() 是最终方法,提取正确的 header 值,根据您的需要检查它,并根据值,抛出异常或继续链。