Primavera de arranque encabezado de solicitud valor de retorno nula

greenPadawan:

Tengo un proyecto de arranque resorte que tiene algunas API de descanso en él. Tengo dos cabeceras personalizadas nombrados request_datey tenant, respectivamente.

Estoy tratando de leer el valor de estas cabeceras en un interceptor, pero lee el valor por sólo tenanty vuelve nulo para request_date.

Importante

  • Yo uso un filtro para envolver el objeto de la petición porque quiero leer el cuerpo de la petición más tarde.
  • Hay un filtro para agregar encabezados CORS.

Cuando ejecuto mi proyecto en el servidor local y depurar el código, soy capaz de leer correctamente los valores tanto de los encabezados.

Sin embargo, cuando despliego mi aplicación en la producción y hacer la solicitud utilizando cartero o algún otro cliente, el request_datevalor de cabecera siempre se lee como nulo.

No estoy seguro de lo que parece ser el problema con esto. Estoy utilizando Spring boot v1.5.10.RELEASEyJDK 1.8

Nota:

  • He tratado de cambiar el nombre de la cabecera para algo así input_date. Sin embargo, todavía se puede leer nula.

El siguiente es el código en cuestión

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);
    }
}
greenPadawan:

El problema fue con la configuración nginx.

He establecido la underscores_in_headers on;para el servidor y ahora no baja las cabeceras con subrayado en sus nombres.

La solución sugerida por @Karol Dowbecki funciona tan bien. Cuando Retitulé mi cabecera a requestDate, yo era capaz de leer el valor éxito.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=136487&siteId=1
Recomendado
Clasificación