Заголовок запроса Spring Boot возвращает нулевое значение - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть весенний загрузочный проект, в котором есть несколько 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);
    }
}

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Проблема была в конфигурации nginx.

Я установил underscores_in_headers on; для сервера, и теперь он не сбрасывает заголовки с подчеркиванием в их именах.

Решение, предложенное @Karol Dowbecki, также работает.Когда я переименовал свой заголовок в requestDate, я смог успешно прочитать значение.

0 голосов
/ 28 февраля 2019

Некоторые сетевые инструменты могут отбрасывать заголовки, содержащие в своем имени подчеркивание.Согласно этот ответ подчеркивание является допустимым символом, но он встречается редко, и иногда инструментам для его поддержки требуется дополнительная конфигурация.

Переименуйте заголовок в requestDate или request-date и посмотрите, поможет ли он,Если это работает без подчеркивания, чем проверить сетевой маршрут между клиентом и сервером, например, может быть есть прокси, который их отбрасывает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...