-
通过实现对openfeign的请求request和响应response的拦截,可以在request和response添加自定义的需求及业务
-
拦截openfeign的请求,并添加业务
import javax.servlet.http.HttpServletRequest;
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 feign.RequestInterceptor;
import feign.RequestTemplate;
import io.micrometer.core.instrument.util.StringUtils;
import io.seata.core.context.RootContext;
@Configuration
public class ComonConfig {
@Bean
public RequestInterceptor requestInterceptor() {
return new RequestInterceptor() {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = attributes.getRequest(); // 老 request
// 从Seata获取XID,并将其添加到Feign请求标头中
String xid = RootContext.getXID();
if (xid != null) {
requestTemplate.header("TX_XID", xid);
}
requestTemplate.header("Cookie", request.getHeader("Cookie")); // 新request
String pageSizeDefault = "20";
String pageNumDefalut = "1";
String pageSize = request.getParameter("pageSize");
String pageNum = request.getParameter("pageNum");
if (StringUtils.isNotEmpty(pageSize)) {
pageSizeDefault = pageSize;
}
if (StringUtils.isNotEmpty(pageNum)) {
pageNumDefalut = pageNum;
}
requestTemplate.header("pageSize", pageSizeDefault);
requestTemplate.header("pageNum"