feign Header参数(传递敏感头信息)

2022-08-03 08:59:54

feign传递http请求是有自己的对象 RequestTemplate ,会过滤掉一些敏感头部信息,比如用户信息,token等。
可以用过如下方式,传统想传递的header。

第一步:设置hystrix的隔离策略

properties 配置文件配置

hystrix.command.default.execution.isolation.strategy = SEMAPHORE

这一步必须添加,否则第二步中的 :RequestContextHolder.getRequestAttributes() 会为空

第二步:添加请求拦截器

代码如下:(这里以 “user” 头部信息为例,对象判空用到了hutool,字符串判空用了lang3)

import cn.hutool.core.util.ObjectUtil;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * 传递头部用户信息
 */
public class FeignBasicAuthRequestInterceptor implements RequestInterceptor {
    private final Logger log = LoggerFactory.getLogger(FeignBasicAuthRequestInterceptor.class);
    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes();
        RequestContextHolder.setRequestAttributes(attributes, true);
        if(ObjectUtil.isNull(attributes))return;
        HttpServletRequest request = attributes.getRequest();
        String userInfo = request.getHeader("user");
        if(StringUtils.isNotBlank(userInfo)){
            requestTemplate.header("user",request.getHeader("user"));
        }
    }
}

第三步:添加Feign配置对象

代码如下:

import feign.RequestInterceptor;
import org.springframework.context.annotation.Bean;


public class FeignHeaderConfig{
    @Bean
    public RequestInterceptor requestInterceptor(){
        return new FeignBasicAuthRequestInterceptor();
    }
}

第四步:在Feign客户端中声明使用以上配置

代码如下:

@FeignClient(value = FeignClientName.template,configuration = FeignHeaderConfig.class)
public interface TemplateService {}
  • 作者:keep-go-on
  • 原文链接:https://keepgoon.blog.csdn.net/article/details/101297264
    更新时间:2022-08-03 08:59:54