У меня есть весенний загрузочный проект, в котором есть несколько API для отдыха.У меня есть два пользовательских заголовка с именами request_date
и tenant
соответственно.
Я пытаюсь прочитать значение этих заголовков в перехватчике, но он читаетзначение только для tenant
и возвращает ноль для request_date
.
Важно
- Iиспользуйте фильтр для переноса объекта запроса, потому что я хочу прочитать тело запроса позже.
- Существует фильтр для добавления заголовков CORS.
Когда я запускаю свой проектна локальном хосте и отладке кода я успешно могу прочитать оба значения заголовков.
Однако, когда я развертываю свое приложение в рабочей среде и делаю запрос с помощью почтальона или другого клиента, request_date
значение заголовка всегда читается как ноль.
Я не уверен, в чем проблема с этим.Я использую Spring boot v1.5.10.RELEASE
и JDK 1.8
Примечание:
- Я попытался переименоватьзаголовок к чему-то вроде
input_date
.Тем не менее, он по-прежнему читает ноль.
Ниже приведен соответствующий код
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);
}
}