Feign动态设置header

背景需求

springmvc 可以直接通过拦截器Interceptor和过滤器filter拦截请求头header,从而获取必要的验证信息作为我们业务逻辑服务。比如权限验证,多租户的权限范围等等。

但是在springcloud中微服务的调用其实最终也是远程调用了http,那么能不能在客户端调用的时候发给服务端的header中添加自定义的信息呢,比如业务线ID或者auhtor信息等等进而和springmvc的业务逻辑部分统一避免额外的代码实现。

Feign设置header目前有两种方式

1.实现拦截器RequestInterceptor 统一处理
2.手工创建Feignclient配置拦截器
3.RequestInterceptor +ThreadLocal实现动态传参

拦截器统一处理

我们可以直接在接口的interface的公共包中加入如下配置,这样同样的调用都会经过这个拦截器处理,进而实现统一的header处理。

import feign.RequestInterceptor;
import feign.RequestTemplate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;


@Slf4j
public class HeaderInterceptor implements RequestInterceptor {
   
   

		@Value("${feign.contract-op.businessId:sys}")
    private String businessId;
    @Override
    public void apply(RequestTemplate requestTemplate) {
   
   
        log.info("requestTemplate.header get value feign.contract-op.businessId: {}= {} ",ContractRequestHeaders.BUSINESS_ID,businessId);
        if(businessId!=null && !"sys".equals(businessId)){
   
   
            requestTemplate.header("businessId", businessId);
        }
    }
}

接口类这里直接配置为configuration,这样每次调用时它都执行一次HeaderInterceptor 拦截器

@FeignClient(
        url = "${feign.contract-op.url:https://192.168.1.1:50003/contract-op-service}/billInfo",
        name = "contractOpClient",
        contextId = "billInfoClient",configuration = ContractFeignConfiguration.class
)
public interface BillInfoClient {
   
   

    @ApiOperation(value = "分页")
    @GetMapping
    PageInfo<BillInfoListResponse
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值