【发布时间】:2023-04-09 05:54:02
【问题描述】:
我有一个 Spring Boot 项目,其中包含一些 Rest API。我有两个分别名为 request_date 和 tenant 的自定义标头。
我试图在拦截器中读取这些标头的值,但它仅读取 tenant 的值,并为 request_date 返回 null。
重要
- 我使用过滤器来包装请求对象,因为我想稍后再读取请求正文。
- 有一个过滤器可以添加 CORS 标头。
当我在 localhost 上运行我的项目并调试代码时,我能够成功读取两个标头的值。
但是,当我在生产中部署我的应用程序并使用邮递员或其他客户端发出请求时,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);
}
}
RequestCacheFilter
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? -
我没有调用 request.getHeaderNames(),但我可以读取其他标头的值。该问题仅特定于“request_date”标头
标签: java spring rest spring-boot http