Feign RequestInterceptor не может получить httpRequestAttributs - PullRequest
0 голосов
/ 31 мая 2019

Я хочу перехватить запрос и добавить access_token в заголовок с помощью симметричного RequestInterceptor. Но когда я отлаживаю в перехватчике, я не могу получить атрибуты. это ноль. Как я могу получить это?

@Override
    public void apply(RequestTemplate requestTemplate) {
//the attributes is null, what happened
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        if(ObjectUtil.isNull(attributes))
        {
            return;
        }
        HttpServletRequest request = Objects.requireNonNull(attributes).getRequest();
        if(ObjectUtil.isNull(request))
        {
            return;
        }
        if(request.getRequestURI().contains(SecurityConstants.MOBILE_TOKEN_URL))
        {
            requestTemplate.header("x-access-type", SecurityConstants.ACCESS_TYPE_PATIENT);
            return;
        }
        if(request.getRequestURI().contains(SecurityConstants.REGISTER_TOKEN_URL))
        {
            requestTemplate.header("x-access-type", SecurityConstants.ACCESS_TYPE_PATIENT);
            return;
        }
        Enumeration<String> headerNames = request.getHeaderNames();
        if (ObjectUtil.isNotNull(headerNames)) {
            while (headerNames.hasMoreElements()) {
                String name = headerNames.nextElement();
                if(name.equalsIgnoreCase("Authorization")) {
                    String values = request.getHeader(name);
                    requestTemplate.header(name, values);
                    break;
                }
            }
        }
    }

1 Ответ

0 голосов
/ 17 июня 2019

Ваша проблема заключается в использовании контекста сервлета для получения запроса вместо Feign requestTemplate.

Это:

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
     .getRequestAttributes();
// other code to check and manipulate it

Должно быть так:

requestTemplate.url().contains("SOME_URL_FOR_TRIGGER") {
  requestTemplate.header("YOUR_HEADER", "YOUR_VALUE");
}
...