feign 局部配置覆盖全局配置

feign 局部配置覆盖全局配置问题

背景:用的底层封装的框架,搞了个全局feign的配置,在RequestInterceptor 拦截器那里将request的请求头又放到了feign头里面,还是这个框架,在对所有的请求做拦截的时候,直接判断请求头里面token这个字段有没有值,有值得话就去解析token, 然后没有解析成功就报错。
这样其实只有服务用的同一个secret才没问题,如果不同得系统用的不同sercret,两边调用就直接报解析token失败了。

处理过程

当时想着就直接在每个feign添加一个局部拦截器,再把请求头token这个字段得值置为空,结果试了下,给这个局部拦截器最低优先级,每次请求进来还是先执行局部的配置,再执行全局的配置,然后百度了半天,好像也没找到啥方案,没办法,就想出了两种方案:

  1. 将HttpServerletRequest中的请求头token置为空 ,feign转发请求头就是从这里获取的,那就在局部配置这里把token置为空;

  2. 看下底层到底怎么实现的,有无提供方法第一种方案也挺麻烦的,HttpServerletRequest并没有直接提供改变头参数的方法;

    感觉第一种太麻烦,觉得应该也有可以让局部配置的拦截器最后执行的方法。所以开始debug了,最后找到了在BeanFactoryUtils类中代码片.

private static String[] mergeNamesWithParent(String[] result, String[] parentResult, HierarchicalBeanFactory hbf) {
		if (parentResult.length == 0) {
			return result;
		}
		List<String> merged = new ArrayList<>(result.length + parentResult.length);
		merged.addAll(Arrays.asList(result));
		for (String beanName : parentResult) {
			if (!merged.contains(beanName) && !hbf.containsLocalBean(beanName)) {
				merged.add(beanName);
			}
		}
		return StringUtils.toStringArray(merged);
	}

说明

result就是局部配置,parentResult 是全局配置, 源代码是写死的,它是先添加完局部配置,再添加全局配置,所有怎么搞都是先执行局部配置再全局,但是添加全局的时候加了个条件,只要局部的bean名字和全局的一直就不添加全局的了,就相当于把这个全局的配置覆盖了,所以只要局部的bean名字和全局的一样就行了。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值