admin
2020-06-19 31e20ddb1eafa5bf64a0824629fb8c7a05450318
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
package com.ks.tool.bkz.aspact;
 
import com.ks.tool.bkz.util.JsonUtil;
import com.ks.tool.bkz.util.StringUtil;
import com.ks.tool.bkz.util.UserUtil;
import com.ks.tool.bkz.util.annotation.Login;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
 
import javax.servlet.http.HttpServletRequest;
import java.io.PrintWriter;
import java.lang.reflect.Method;
 
//客户端登录验证
@Component
@Aspect
@Order(1)
public class NeedLoginAspect {
    static {
        System.out.println("登录验证初始化");
    }
 
    public static final String EDP = "execution(* com.ks.tool.bkz.controller..*.*(..))";
 
    @Around(EDP)
    public Object requestSerializable(ProceedingJoinPoint joinPoint) throws Throwable {
        try {
            Signature signature = joinPoint.getSignature();
            MethodSignature methodSignature = (MethodSignature) signature;
            Method targetMethod = methodSignature.getMethod();
            Method realMethod = joinPoint.getTarget().getClass().getDeclaredMethod(joinPoint.getSignature().getName(),
                    targetMethod.getParameterTypes());
            if (realMethod.isAnnotationPresent(Login.class)) {
                //登录
                ServletRequestAttributes servletContainer = (ServletRequestAttributes) RequestContextHolder
                        .getRequestAttributes();
                HttpServletRequest request = servletContainer.getRequest();
                String token = request.getHeader("token");
                if (!StringUtil.isNullOrEmpty(token)) {
                    String account = UserUtil.getAccountFromToken(token);
                    if (!StringUtil.isNullOrEmpty(account)) {
                        Object obj = joinPoint.proceed(joinPoint.getArgs());
                        return obj;
                    }
                }
                //用户未登录
                PrintWriter out = servletContainer.getResponse().getWriter();
                out.print(JsonUtil.loadFalseResult(1001, "未登录"));
                out.close();
                return null;
            }
        } catch (Exception e) {
 
        }
        return joinPoint.proceed(joinPoint.getArgs());
    }
 
 
}