假設現在有A服務,B服務,外部使用RESTApi請求調用A服務,在請求頭上有token字段,A服務使用完后,B服務也要使用,如何才能把token也轉發到B服務呢?這里可以使用Feign的RequestInterceptor,但是直接使用一般情況下HttpServletRequest上下文對象是為空的,這里要怎么處理,請看下文。
服務A中 FeginInterceptor
@Configuration public class FeginInterceptor implements RequestInterceptor { @Override public void apply(RequestTemplate requestTemplate) { 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) { e.printStackTrace(); 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; } }
服務A配置文件中添加:application.yml
hystrix: command: default: execution: isolation: strategy: SEMAPHORE
若服務B或C也想傳遞token,加上上述A配置即可。
————————————————
版權聲明:本文為CSDN博主「PaineL」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/ypl603330811/article/details/80773395