wuxw
2022-04-19 c228e04e0d4e5a63a91222edf22b0ec7e7b8dcbc
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
package com.java110.core.language;
 
import com.alibaba.fastjson.JSONObject;
import com.java110.core.trace.Java110TraceFactory;
import com.java110.dto.trace.TraceParamDto;
import com.java110.utils.constant.CommonConstant;
import com.java110.utils.factory.ApplicationContextFactory;
import com.java110.utils.util.StringUtil;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
/**
 * trace log  api aop
 */
@Component
@Aspect
public class Java110LangAop {
 
 
 
    @Pointcut("@annotation(com.java110.core.language.Java110Lang)")
    public void dataProcess() {
    }
 
    //环绕通知,环绕增强,相当于MethodInterceptor
    @Around("dataProcess()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {
        Object out = null;
        RequestAttributes ra = RequestContextHolder.getRequestAttributes();
        ServletRequestAttributes sra = (ServletRequestAttributes) ra;
        HttpServletRequest request = sra.getRequest();
        String lang = request.getHeader(CommonConstant.JAVA110_LANG);
 
        out = pjp.proceed();
 
        if (StringUtil.isEmpty(lang) || "zh-cn".equals(lang)) {
            return out;
        }
 
 
        if (out instanceof ResponseEntity) {
            String body = ((ResponseEntity) out).getBody().toString();
 
            if (!StringUtil.isJsonObject(body)) {
                return out;
            }
            JSONObject outJson = JSONObject.parseObject(body);
            String msg = outJson.getString("msg");
 
            Language language = ApplicationContextFactory.getBean(lang, Language.class);
 
            if (language == null) {
                return out;
            }
 
            msg = language.getLangMsg(msg);
 
            outJson.put("msg", msg);
 
            return new ResponseEntity(outJson.toJSONString(), ((ResponseEntity) out).getStatusCode());
        }
 
        return out;
    }
}