package com.java110.core.trace; import com.java110.core.factory.Java110TraceFactory; 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); } }