天天看點

解決feign傳遞自定義request請求頭,傳遞失敗(空)的問題

  1. 在第一次請求方,配置該攔截器:
@Configuration
public class FeignInterceptor implements RequestInterceptor {

    // TODO 所有feign調用均會被攔截

    @Override
    public void apply(RequestTemplate requestTemplate) {
        HttpServletRequest request = getHttpServletRequest();
        if (null == request){
            return;
        }
        Map<String,String> headers = getHeaders(getHttpServletRequest());
        for(String headerName : headers.keySet()){
            requestTemplate.header(headerName, getHeaders(getHttpServletRequest()).get(headerName));
        }
    }

    private HttpServletRequest getHttpServletRequest() {
        try {
            return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        } catch (Exception e) {
            return null;
        }
    }

    private Map<String, String> getHeaders(HttpServletRequest request) {
        Map<String, String> map = new LinkedHashMap<>();
        Enumeration<String> enumeration = request.getHeaderNames();
        while (enumeration.hasMoreElements()) {
            String key = enumeration.nextElement();
            String value = request.getHeader(key);
            map.put(key, value);
        }
        return map;
    }
}
           
  1. 重點配置

    A服務配置bootstrap.yml

hystrix:
     command:
       default:
         execution:
           isolation:
             strategy: SEMAPHORE
           
  1. 在使用feign接受方參數接受HttpServletRequest:
public AjaxResponseObject getRequestByUser(HttpServletRequest request){
    }
           
  • 或者使用注入:
@Autowired
    private HttpServletRequest servletRequest;

    public String test() {
        return servletRequest.getHeader("token");
    }
           

參考于此文章

繼續閱讀