我有一个Spring Boot项目,其中包含一些Rest API。我有两个自定义标头分别为request_date
和tenant
。
我试图在拦截器中读取这些标头的值,但它只读取tenant
的值,并返回request_date
的null值。
重要
- 我使用过滤器来包装请求对象,因为我想稍后读取请求正文。
- 有一个过滤器添加CORS头。
当我在本地主机上运行我的项目并调试代码时,我能够成功读取两个标头的值。
然而,当我在生产环境中部署应用程序并使用Postman或其他客户端发出请求时,request_date
标头的值始终被读取为null。
我不确定问题出在哪里。我正在使用Spring Boot v1.5.10.RELEASE
和JDK 1.8
注意:
- 我已经尝试将标头重命名为类似
input_date
的名称。但它仍然读取null。
以下是相关代码
TestInterceptor
public class TestInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestDate = request.getHeader("request_date");
String tenant = request.getHeader("Tenant");
/*Perform some checks*/
return super.preHandle(request, response, handler);
}
}
CorsFilter
public class ApiCorsFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, OPTIONS, DELETE, PUT");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers," +
" X-Requested-With, Origin, X-Auth-Token, Tenant, request_date");
response.addHeader("Access-Control-Expose-Headers", "X-Auth-Token, Content-Disposition");
chain.doFilter(request, response);
}
}
请求缓存过滤器public class RequestCacheFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
HttpServletRequest req = new RequestWrapper(request);
String body = ((RequestWrapper) req).getBody();
/*Do some operation*/
filterChain.doFilter(req, response);
}
}
request.getHeaderNames()
,那么缺失的标头中是否可能设置为 null? - StanislavL