Feign服务调用之间带token

您所在的位置:网站首页 feign带token Feign服务调用之间带token

Feign服务调用之间带token

2024-05-17 22:28| 来源: 网络整理| 查看: 265

1、使用@RequestHeader注解添加参数到请求头中去

@FeignClient(name = "capability-register", fallback = ApiServiceClientFallBack.class ) public interface ApiServiceClient { @GetMapping("/apiDebug/") Result debug(@RequestParam("url") String path, @RequestParam("param") String param, @RequestParam("method") String method, @RequestParam("appKey") String appKey, @RequestHeader(name = "Token",required = true) String Token); }

2、对所有的feign调用统一设置请求头

import org.springframework.context.annotation.Configuration; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import java.util.Enumeration; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; import javax.servlet.http.HttpServletRequest; import feign.RequestInterceptor; import feign.RequestTemplate; @Configuration // 加上该注解 ,则不需要FeignClient里面加属性configuration public class FeignHeadersInterceptor implements RequestInterceptor { @Override public void apply(RequestTemplate template) { HttpServletRequest request = getHttpServletRequest(); if (Objects.isNull(request)) { return; } Map headers = getHeaders(request); if (headers.size() > 0) { Iterator iterator = headers.entrySet().iterator(); while (iterator.hasNext()) { Entry entry = iterator.next(); // 把请求过来的header请求头 原样设置到feign请求头中 // 包括token template.header(entry.getKey(), entry.getValue()); } } } private HttpServletRequest getHttpServletRequest() { try { // 这种方式获取的HttpServletRequest是线程安全的 return ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest(); } catch (Exception e) { return null; } } private Map getHeaders(HttpServletRequest request) { Map map = new LinkedHashMap(); Enumeration enums = request.getHeaderNames(); while (enums.hasMoreElements()) { String key = enums.nextElement(); String value = request.getHeader(key); map.put(key, value); } return map; } }

  getHttpServletRequest方法获取Request请求,而getHeaders从Request中拿到请求头信息,最后设置到RequestTemplate的headers中,而RequestTemplate就相当于feign客户端的HttpClient。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3