package com.java110.core.trace; import com.java110.core.log.LoggerFactory; import com.java110.dto.trace.TraceAnnotationsDto; import org.slf4j.Logger; import org.springframework.stereotype.Component; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; /** * 所有请求 调用链 拦截 * Created by wuxw on 2018/5/2. */ @Component public class Java110TraceHandlerInterceptor extends HandlerInterceptorAdapter { private static Logger logger = LoggerFactory.getLogger(Java110TraceHandlerInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { logger.debug("进入拦截器Java110TraceHandlerInterceptor>>preHandle"); // 获取组件名称 和方法名称 String url = request.getRequestURI() != null ? request.getRequestURI() : ""; Map headers = new HashMap<>(); Enumeration reqHeaderEnum = request.getHeaderNames(); while (reqHeaderEnum.hasMoreElements()) { String headerName = (String) reqHeaderEnum.nextElement(); headers.put(headerName.toLowerCase(), request.getHeader(headerName)); } //调用链logSwatch Java110TraceFactory.createTrace(url, headers); return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { logger.debug("完成拦截器Java110TraceHandlerInterceptor>>afterCompletion"); Java110TraceFactory.putAnnotations(TraceAnnotationsDto.VALUE_CLIENT_RECEIVE); //response.getOutputStream(); } // public String getReqData(HttpServletRequest request) throws Exception{ // String reqData = ""; // if ("POST,PUT".contains(request.getMethod())) { // InputStream in = request.getInputStream(); // BufferedReader reader = new BufferedReader(new InputStreamReader(in)); // //reader. // StringBuffer sb = new StringBuffer(); // String str = ""; // while ((str = reader.readLine()) != null) { // sb.append(str); // } // reqData = sb.toString(); // } else { // Map params = request.getParameterMap(); // if (params != null && !params.isEmpty()) { // JSONObject paramObj = new JSONObject(); // for (String key : params.keySet()) { // if (params.get(key).length > 0) { // String value = ""; // for (int paramIndex = 0; paramIndex < params.get(key).length; paramIndex++) { // value += (params.get(key)[paramIndex] + ","); // } // value = value.endsWith(",") ? value.substring(0, value.length() - 1) : value; // paramObj.put(key, value); // } // continue; // } // reqData = paramObj.toJSONString(); // } // } // // return reqData; // } }