验证Spring RestController中的HTTP-Header字段

时间:2016-09-17 21:19:11

标签: spring spring-security spring-restcontroller spring-rest spring-validator

我正在寻找一种方法来验证自定义标头&#39; X-Client-Id&#39;设置为在SpringBoot中发送到REST控制器的HTTP请求中的List<int> ints1 = new List<int>(); ids.Add(1); ids.Add(2); ids.Add(3); var values = new List<KeyValuePair<string, object>> { new KeyValuePair<string, object>("parm1", "lkdjfowejfd123"), new KeyValuePair<string, object>("parm2", ints1) }; var httpClient = new HttpClient(new HttpClientHandler()); HttpResponseMessage response = await httpClient.PostAsync(someUrl, new FormUrlEncodedContent(values)); response.EnsureSuccessStatusCode(); string data = await response.Content.ReadAsStringAsync(); 中定义的值。

我看到教程(如this),其中包含方法中的标题,如下所示:Repository。我假设我必须将该行写入每个方法并注入一个公共验证器bean来验证该值。

另一个stackoverflow answer似乎建议使用@RequestHeader(value="User-Agent")。我不确定它是否适用于标头值和REST端点。

那么验证类/ REST控制器的所有方法是否设置了特定标头的推荐方法是什么?

1 个答案:

答案 0 :(得分:2)

基本上最简单(也是最合乎逻辑)的方法是在请求到达Controller之前捕获它。这可以通过HandlerInterceptor作为其他回答状态或使用简单的Filter OncePerRequestFilter来实现。

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