MyFeignInterceptor.java 1.86 KB
Newer Older
刘基明's avatar
刘基明 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
package com.tanpu.community.config;

import feign.RequestInterceptor;
import feign.RequestTemplate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Map;

/**
 * @description: 透传spring 头信息
 * @author: wanglei
 * @created: 2020/05/08 11:55
 */
@Slf4j
@Component
public class MyFeignInterceptor implements RequestInterceptor {

    @Override
    public void apply(RequestTemplate template) {

        HttpServletRequest request = getHttpServletRequest();

        if (request != null) {
            Map<String, Collection<String>> feignHeaders = template.headers();
            Enumeration<String> headerNames = request.getHeaderNames();
            while (headerNames.hasMoreElements()) {
                String name = headerNames.nextElement();
                // 不覆盖feign的头信息
                if (!feignHeaders.containsKey(name) ) {
                    // if (name.equalsIgnoreCase("uid") || name.equalsIgnoreCase("tamptoken")){
                        template.header(name, request.getHeader(name));
                    // }
                }
            }
            log.debug("添加后的头信息:{}", template.headers());
        } else {
            log.debug("没有添加feign头信息");
        }
    }

    /**
     * 如果不是从controller过来的请求(例如定时器等),是没有request对象的
     */
    private HttpServletRequest getHttpServletRequest() {
        try {
            return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
        } catch (Exception e) {
        }
        return null;
    }
}