关于sprintboot微服务请求token传递(解决方法)
1. 使用@RequestHeader(只需要改变消费者的请求参数)(测试可用)
在访问FeignClient的controller中加入@RequestHeader将请求头中的token取出来作为参数传入FeignClient中
在FeignClient中使用@RequestHeader将token参数放入到请求头中
2.通过实现 RequestInterceptor 接口,拦截发出的feignClient请求装入请求的token(未测试)
import org.springframework.stereotype.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 implements RequestInterceptor {
@Override
public void apply(RequestTemplate requestTemplate) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
requestTemplate.header(name, values);
}
}
}
}
然后将自定义的配置类配置到Feign中,就可以实现该Feign中接口Header参数的传递
@FeignClient(value = "service-name" ,configuration = FeignConfiguration.class)
public interface XXXFeignClient {
}