|
@ -20,9 +20,11 @@ import org.springframework.context.annotation.Conditional;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.util.LinkedMultiValueMap;
|
|
|
import org.springframework.util.StreamUtils;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import java.io.InputStream;
|
|
|
import java.net.URL;
|
|
|
import java.util.Enumeration;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@ -33,7 +35,7 @@ import java.util.Map;
|
|
|
@Component
|
|
|
@ConditionalOnProperty(name = "yihu.admin.client.advice.zuul.route", havingValue = "true")
|
|
|
public class ZuulRouteFilter extends ZuulFilter {
|
|
|
private Logger logger= LoggerFactory.getLogger(ZuulRouteFilter.class);
|
|
|
private Logger logger = LoggerFactory.getLogger(ZuulRouteFilter.class);
|
|
|
@Autowired
|
|
|
private Tracer tracer;
|
|
|
@Autowired
|
|
@ -44,6 +46,9 @@ public class ZuulRouteFilter extends ZuulFilter {
|
|
|
private String spanrName;
|
|
|
@Autowired
|
|
|
private ProxyRequestHelper helper;
|
|
|
@Autowired
|
|
|
private okhttp3.OkHttpClient httpClient;
|
|
|
|
|
|
@Override
|
|
|
public String filterType() {
|
|
|
//filterType:返回过滤器的类型。有pre、route、post、error等几种取值
|
|
@ -54,7 +59,7 @@ public class ZuulRouteFilter extends ZuulFilter {
|
|
|
@Override
|
|
|
public int filterOrder() {
|
|
|
//回一个int值来指定过滤器的执行顺序,不同的过滤器允许返回相同的数字
|
|
|
return 0;
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@ -68,13 +73,12 @@ public class ZuulRouteFilter extends ZuulFilter {
|
|
|
try {
|
|
|
RequestContext ctx = RequestContext.getCurrentContext();
|
|
|
HttpServletRequest request = ctx.getRequest();
|
|
|
OkHttpClient httpClient = new OkHttpClient.Builder() .build();
|
|
|
|
|
|
|
|
|
String method = request.getMethod();
|
|
|
|
|
|
String uri = this.helper.buildZuulRequestURI(request);
|
|
|
String idAddress= request.getRequestURL().toString().replace(request.getRequestURI(),"");
|
|
|
|
|
|
Headers.Builder headers = new Headers.Builder();
|
|
|
Enumeration<String> headerNames = request.getHeaderNames();
|
|
|
while (headerNames.hasMoreElements()) {
|
|
@ -86,7 +90,14 @@ public class ZuulRouteFilter extends ZuulFilter {
|
|
|
headers.add(name, value);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
String address="";
|
|
|
URL hostId = RequestContext.getCurrentContext().getRouteHost();
|
|
|
Object serviceId = RequestContext.getCurrentContext().get("serviceId");
|
|
|
if(hostId!=null){
|
|
|
address=hostId.toString();
|
|
|
}else if(!StringUtils.isEmpty(serviceId)){
|
|
|
address="http://"+serviceId.toString();
|
|
|
}
|
|
|
InputStream inputStream = request.getInputStream();
|
|
|
|
|
|
RequestBody requestBody = null;
|
|
@ -100,7 +111,7 @@ public class ZuulRouteFilter extends ZuulFilter {
|
|
|
|
|
|
Request.Builder builder = new Request.Builder()
|
|
|
.headers(headers.build())
|
|
|
.url(idAddress+uri)
|
|
|
.url(address+uri)
|
|
|
.method(method, requestBody);
|
|
|
//日志
|
|
|
HttpEvent event = new HttpEvent();
|
|
@ -114,15 +125,15 @@ public class ZuulRouteFilter extends ZuulFilter {
|
|
|
}
|
|
|
|
|
|
Response response = httpClient.newCall(builder.build()).execute();
|
|
|
try{
|
|
|
try {
|
|
|
Long endTime = System.currentTimeMillis();
|
|
|
event.setHeader(headerObj.toString());
|
|
|
event.setEventStartTime(startTime);
|
|
|
event.setEventEndTime(endTime);
|
|
|
event.setExcuteTime(endTime-startTime);
|
|
|
event.setExcuteTime(endTime - startTime);
|
|
|
event.setHeader(headerObj.toString());
|
|
|
event.setEventName("system_zuul_tracer");
|
|
|
event.setResponseParams( response.body().string());
|
|
|
event.setResponseParams(response.body().string());
|
|
|
event.setSpanName(spanrName);
|
|
|
event.setSpanId(tracer.getCurrentSpan().getSpanId() + "");
|
|
|
event.setTraceId(tracer.getCurrentSpan().traceIdString());
|
|
@ -132,7 +143,7 @@ public class ZuulRouteFilter extends ZuulFilter {
|
|
|
event.setIp(ip);
|
|
|
event.setMethod(request.getMethod());
|
|
|
simpleEventSender.send(event);
|
|
|
}catch (Exception e){
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
logger.error(e.getMessage());
|
|
|
}
|
|
@ -143,12 +154,10 @@ public class ZuulRouteFilter extends ZuulFilter {
|
|
|
responseHeaders.put(entry.getKey(), entry.getValue());
|
|
|
}
|
|
|
|
|
|
this.helper.setResponse(response.code(), response.body().byteStream(),responseHeaders);
|
|
|
this.helper.setResponse(response.code(), response.body().byteStream(), responseHeaders);
|
|
|
ctx.setRouteHost(null); // prevent SimpleHostRoutingFilter from running
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
logger.error(e.getMessage());
|