千家信息网

Feign怎么解决服务之间调用传递token

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇"Feign怎么解决服务之间调用传递token"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起
千家信息网最后更新 2026年11月04日Feign怎么解决服务之间调用传递token

这篇"Feign怎么解决服务之间调用传递token"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Feign怎么解决服务之间调用传递token"文章吧。

解决服务之间调用传递token

现在的微服务基本就是SpringSecurity+Oauth3做的授权和认证,假如多个服务直接要通过Fegin来调用,会报错401

  • a、有做权限处理的服务接口直接调用会造成调用时出现http 401未授权的错误,继而导致最终服务的http 500内部服务器错误

  • b、解决方式:最方便的就是往请求头里加上token,一起带过去;

Feign有提供一个接口RequestInterceptor

只要实现这个接口,简单做一些处理,比如说我们验证请求头的token叫Access-Token,我们就先取出当前请求的token,然后放到feign请求头上;

public class FeignConfig implements RequestInterceptor {        @Override        public void apply(RequestTemplate requestTemplate) {            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();            HttpServletRequest request = attributes.getRequest();            //添加token            requestTemplate.header(HttpHeaders.AUTHORIZATION, request.getHeader(HttpHeaders.AUTHORIZATION));        }    }

调用方式

    @FeignClient(name = "qtjuaa", configuration = FeignConfig.class)    public interface UaaClient {        @RequestMapping(value = "/api/test", method= RequestMethod.GET)        String test();    }

Feign调用服务各种坑处理

编写被调用服务

@RefreshScope@RestControllerpublic class XXXController extends BaseController implements IndicatorsFeignApi{        @Resource        private XXXService xxx;        @Override        public Wrapper getXXXX(@RequestBody CommonDto commonDto) {                try {                        CommonVo vo = xxx.getdata(commonDto);                        return WrapMapper.ok(vo);                }catch(Exception e) {                        e.printStackTrace();                        return WrapMapper.error("系统异常,请联系管理员!");                }        }}//Service不进行展示,注意参数传递至service层时要加入注解@RequestBody等才能获取参数

在配置文件添加feign相关配置

编写调用api

pom文件中添加相关依赖

org.springframework.cloudspring-cloud-starter-hystrixorg.springframework.cloudspring-cloud-starter-netflix-hystrix-dashboard

调用Api

@FeignClient(value = "被调用服务名")public interface IndicatorsFeignApi {                @PostMapping(value = "/api/getXXXX",consumes="application/json", headers = {"Accept=application/json", "Content-Type=application/json"})        Wrapper getXXXX(@RequestBody CommonDto commonDto);       }

Feign调用错误处理,发生相关错误是会跳转至fallback处理

@Componentpublic class IndicatorsFeignApiHystrix implements IndicatorsFeignApi {        @Override        public Wrapper getXXXX(CommonDto commonDto) {                System.out.println("=====调用服务获数据发生异常======");                return null;        }}

当启用fallback后,有些报错不会打印在控制台上,这时可以修改配置中的

feign:  hystrix:    enabled: true

将enabled改为false,错误发生后将不会跳转fallback。

此处有一个坑,当时调用的时候服务是可以调用成功的,但是有一个报错:

Could not extract response: no suitable HttpMessageConverter found for response type [XXXX] and content type [text/html;charset=UTF-8]

貌似是返回数据的编码与接收实体类不一样,导致报错。加上headers = {"Accept=application/json", "Content-Type=application/json"}解决了相关问题.

编写客户端服务

//serviceImp层   @Autowired    private IndicatorsFeignApi api;//声明调用api        @Override    public CommonVo getXXX(CommonDto commonDto) {        Wrapper result =   api.getXXXX(commonDto);//服务调用        if(result!=null) {            return result.getResult();        }else {            return new CommonVo();        }    }

以上就是关于"Feign怎么解决服务之间调用传递token"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

服务 内容 错误 处理 之间 就是 接口 配置 参数 数据 文件 文章 方式 知识 篇文章 成功 价值 多个 大部分 实体 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 国智互联网科技 金诺互联网科技 云电互联网科技 致聘互联网科技 上海致骋互联网科技 顺玮阁互联网科技 金融科技和互联网金融 甘肃拓世互联网科技有限公司 深圳卡尔迅互联网科技有限公司怎么样 老年人脱离互联网科技的作文 科技互联网的估值 团飞科技与伯堂互联网服务平台 科技与互联网哪个更好 来此购互联网科技有限公司 宜昌元轩互联网科技有限公司 速维有品互联网信息科技(苏州)有限公司 广州新华互联网科技学校电竞方面 工业互联网科技创业 华人运通互联网科技公司 广州为想互联网科技有限公司 互联网科技公司简介 佩信高科技互联网 济南和联互联网科技有限公司 港股科技和互联网 互联网科技公司实习生 广州市恰铎互联网科技有限公司 深圳艾果互联网通讯科技 互联网科技圈年度人物 玉溪新华互联网科技怎么选
0