Feign接口统一携带请求头配置(RequestTemplate)

1:需求

请求feign的时候,需要在请求头携带token信息,参数名为:Authorization

2:方案

import com.alibaba.fastjson.JSON;
import feign.RequestTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Configuration;

import java.util.Collection;
import java.util.Map;

@Configuration
public class FeignConfiguration implements feign.RequestInterceptor {

    private final static Logger logger = LoggerFactory.getLogger(FeignConfiguration.class);

    @Override
    public void apply(RequestTemplate requestTemplate) {
        //1:获取普通参数
        Map<String, Collection<String>> queries = requestTemplate.queries();
        Collection<String> authorization = queries.get("Authorization");
        if (authorization != null) {
            requestTemplate.header("Authorization", authorization);
            return;
        }

        //2:获取Body中的参数
        try {
            byte[] bytes = requestTemplate.requestBody().asBytes();
            if (bytes != null) {
                Map obj = JSON.parseObject(bytes, Map.class);
                Object simToken = obj.get("Authorization");
                if (simToken != null && !"".equals(simToken)) {
                    requestTemplate.header("Authorization", simToken.toString());
                    return;
                }
            }
        } catch (Exception e) {
            logger.warn("解析标识失败!{}", e);
        }
        logger.warn("请求未找到应用鉴权标识!");
    }

}

 上述代码,会在请求feign之前,获取请求该feign的接口参数Authorization,并且把它设置到请求头里面。

posted @ 2023-05-17 17:30  鸭猪是的念来过倒  阅读(1258)  评论(0)    收藏  举报