UserPermissionCheckAOP.java 2.6 KB
package com.tianbo.analysis.annotation;

import com.tianbo.analysis.dao.COMPANYUSERMapper;
import com.tianbo.analysis.model.COMPANYUSER;
import com.tianbo.analysis.model.ResultJson;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.CodeSignature;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.lang.reflect.Method;

@Aspect
@Component
public class UserPermissionCheckAOP {

    @Resource
    COMPANYUSERMapper companyuserMapper;

    @Pointcut("@annotation(com.tianbo.analysis.annotation.UserPermissionCheck)")
    public void annotationPointCut(){

    }

    @Before("annotationPointCut()")
    public void before(JoinPoint joinPoint){
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method= signature.getMethod();
        UserPermissionCheck annotation = method.getAnnotation(UserPermissionCheck.class);
        System.out.print("打印:权限校验 开始前");
    }

    @Around("annotationPointCut()")
    public Object advice(ProceedingJoinPoint joinPoint){
        System.out.println("通知之开始");
        Object[] args = joinPoint.getArgs();
        String[] paramNames = ((CodeSignature) joinPoint.getSignature()).getParameterNames();

        COMPANYUSER user = new COMPANYUSER();
        if (args != null && args.length > 0) {
            for (int i = 0; i < paramNames.length; i++) {
                System.out.println("参数>>"+paramNames[i]+","+args[i]);
                if ("username".equals(paramNames[i])){
                    user.setCropCode(args[i].toString());
                }
                if ("userid".equals(paramNames[i])){
                    user.setId(args[i].toString());
                }
            }
        }

        Object retmsg=null;
        try {
            //检查用户名与用户ID是否一致
            COMPANYUSER usercheck =  companyuserMapper.selectByIdAndName(user);

            if (usercheck==null){
                //todo:检查用户页面访问权限。权限不对或者用户名不一致 都返回401
                return new ResultJson("401","无访问权限");
            }

            retmsg=joinPoint.proceed(args);
            System.err.println("++++++++"+retmsg);
        } catch (Throwable e) {
            e.printStackTrace();
        }
        System.out.println("通知之结束");
        return retmsg;
    }

    @After("annotationPointCut()")
    public void after(){
        System.out.println("after方法执行后");
    }

}