/** * Feign统一Token拦截器 */@Componentpublic class FeignTokenInterceptor implements RequestInterceptor { @Override public void apply(RequestTemplate requestTemplate) { if(null==getHttpServletRequest()){ //此处省略日志记录 return; } //将获取Token对应的值往下面传 requestTemplate.header("oauthToken", getHeaders(getHttpServletRequest()).get("oauthToken")); } private HttpServletRequest getHttpServletRequest() { try { return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); } catch (Exception e) { return null; } } /** * Feign拦截器拦截请求获取Token对应的值 * @param request * @return */ 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; }}
代码见:
https://github1s.com/springcloud/spring-cloud-code/blob/HEAD/ch4-5/ch4-5-consumer/src/main/java/cn/springcloud/book/feign/Interceptor/FeignTokenInterceptor.java#L14-L53