java110
2022-02-20 6259166c380d443c7b03184452833121942cb148
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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<String, Object> 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<String, String[]> 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;
//    }
 
 
}