假设现在有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