| 
					
				 | 
			
			
				@ -0,0 +1,93 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.admin.client.advice; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.netflix.zuul.ZuulFilter; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.netflix.zuul.context.RequestContext; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.admin.client.properties.AdminClientProperties; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.admin.client.util.NetworkUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.admin.client.websocket.event.HttpEvent; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.admin.client.websocket.sender.SimpleEventSender; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import net.sf.json.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.cloud.sleuth.Tracer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Component; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.servlet.http.HttpServletRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.servlet.http.HttpServletResponse; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Enumeration; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Created by chenweida on 2018/5/31 0031. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				public class ZuulPostFilter extends ZuulFilter { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private Tracer tracer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private SimpleEventSender simpleEventSender; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private AdminClientProperties adminClientProperties; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Value("${spring.application.name}") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String spanrName; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String filterType() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //filterType:返回过滤器的类型。有pre、route、post、error等几种取值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return "post"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public int filterOrder() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //回一个int值来指定过滤器的执行顺序,不同的过滤器允许返回相同的数字 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean shouldFilter() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //返回一个boolean值来判断该过滤器是否要执行,true表示执行,false表示不执行。 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return adminClientProperties.getZuulPost(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public Object run() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        RequestContext ctx = RequestContext.getCurrentContext(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        HttpServletRequest request = ctx.getRequest(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            HttpEvent event = new HttpEvent(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Long startTime = System.currentTimeMillis(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String ip = NetworkUtil.getIpAddress(request); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            JSONObject headerObj = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Enumeration<String> headers = request.getHeaderNames(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            while (headers.hasMoreElements()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String value = headers.nextElement(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                headerObj.put(value, request.getHeader(value)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setHeader(headerObj.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setEventStartTime(startTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setEventEndTime(startTime); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setExcuteTime(0L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setHeader(headerObj.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setEventName("system_http_tracer"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setSpanName(spanrName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setSpanId(tracer.getCurrentSpan().getSpanId() + ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setTraceId(tracer.getCurrentSpan().traceIdString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setRequestParams(JSONObject.fromObject(request.getParameterMap()).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setSuccess(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setUri(HttpAdvice.matchURI(request)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setIp(ip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            event.setMethod(request.getMethod()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            simpleEventSender.send(event); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        HttpServletResponse response = ctx.getResponse(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return response; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |