gre*_*wan 9 java rest spring http spring-boot
我有一个spring boot项目,里面有一些Rest API.我有两个自定义标题命名request_date和tenant分别.
我试图在拦截器中读取这些头的值,但它只读取值tenant并返回null request_date.
重要
当我在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);
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
问题出在nginx配置上。
我underscores_in_headers on;为服务器设置了,现在它不会删除标题中带有下划线的标头。
@Karol Dowbecki建议的解决方案也有效。将标头重命名为时requestDate,我能够成功读取该值。
| 归档时间: |
|
| 查看次数: |
1613 次 |
| 最近记录: |