今日份鸡汤:生活从不亏待每一个努力向上的人,未来的幸运都是过往努力的积攒,趁阳光正好去追逐梦想~
需求背景:
我们知道springMVC中我们可以通过拦截器和过滤器拦截请求头,来获取一些信息处理我们的业务员逻辑,比如权限验证等。
但是在springcloud中微服务的调用Feign其实最终也是远程调用了http,那么能不能在客户端调用的时候发给服务端的header中添加自定义的信息呢?从而满足一些业务逻辑处理,不用到处实现重复的业务逻辑。直奔主题,来看一下Feign如何动态设置header。
拦截器统一处理:
我们可以直接在接口的interface的公共包中加入如下配置,这样同样的调用都会经过这个拦截器处理,进而实现统一的header处理。
public class HeaderInterceptor implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
//以下条件里面根据自己的业务逻辑去写
if(true){
requestTemplate.header("businessId", businessId);
}
}
}
接口类这里直接配置为configuration,这样每次调用时它都执行一次
HeaderInterceptor 拦截器
@FeignClient(
url = "${feign.contract-op.url:https://localhost:8081/contract-op-service}/billInfo",
name = "contractOpClient",
contextId = "billInfoClient",configuration = ContractFeignConfiguration.class
)
public interface BillInfoClient {
@ApiOperation(value = "分页")
@GetMapping
PageInfo<BillInfoListResponse> page(@SpringQueryMap @Validated BillInfoListRequest searchRequest);
}
如果我们不在这个configuration 配置,而是HeaderInterceptor 加上@Configuration注解或者@Component注解(二者区别:@Component和@Configuration的作用和区别),那么它会对所有全局的feignclien都会加上这个参数处理。
网友评论