import feign.Logger;
import feign.RequestInterceptor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
@Configuration
public class FeignConfiguration {
Log logger = LogFactory.getLog(FeignConfiguration.class);
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
@Bean
public RequestInterceptor requestInterceptor() {
return requestTemplate -> {
ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attrs != null) {
HttpServletRequest request = attrs.getRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String value = request.getHeader(name);
if ("Authorization".equalsIgnoreCase(name)) {
logger.debug("添加自定义请求头key:" + name + ",value:" + value);
requestTemplate.header(name, value);
} else {
logger.debug("FeignHeadConfiguration 非自定义请求头key:" + name + ",value:" + value + "不需要添加!");
}
}
} else {
logger.warn("FeignHeadConfiguration 获取请求头失败!");
}
}
};
}
}
使用
import com.alibaba.fastjson.JSONObject;
import com.config.FeignConfiguration;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient(url = "${myurl}/", name = "deviceDataFeign", configuration = FeignConfiguration.class)
public interface DeviceDataFeign {
@GetMapping("thing-instance/v1/device/device-instances")
JSONObject getDevices();
}