[英]Spring Boot request header return null value
我有一个spring boot项目,里面有一些Rest API。 我有两个名为request_date
和tenant
自定义标头。
我试图在拦截器中读取这些头的值,但它只读取tenant
的值,并为request_date
返回null。
重要
当我在localhost上运行我的项目并调试代码时,我成功地读取了两个标头的值。
但是,当我在生产中部署我的应用程序并使用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);
}
}
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);
}
}
某些网络工具可以删除其名称中包含下划线的标头。 根据这个答案,下划线是一个合法的字符,但它并不常见,有时工具需要额外的配置来支持它。
将标题重命名为requestDate
或request-date
,看看它是否有帮助。 如果它没有下划线而不是检查客户端和服务器之间的网络路由,例如可能有一个代理丢弃它们?
问题在于nginx配置。
我设置了underscores_in_headers on;
对于服务器,现在它不会删除名称中带下划线的标题。
@Karol Dowbecki建议的解决方案也适用。 当我将标题重命名为requestDate
,我能够成功读取该值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.