SpringBoot使用aspectj实现注解登录验证拦截

1,导入Maven依赖

		<dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
        </dependency>

2,编写注解类LoginRequired.java

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @author David
 * @className LoginRequired
 * @date 2020/3/17 14:56
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginRequired {
}

3,使用aspectj的around通知增强拦截

@Aspect
@Component
public class LoginAspect {


    @Autowired
    private RedisUtils redisUtils;

    private Logger logger = LoggerFactory.getLogger(LoginAspect.class);

    @Pointcut("execution(* com.sdzh..controller.*.*(..))")
    public void pointcut(){}

    @Around(value = "pointcut()")
    public Object around(ProceedingJoinPoint pjp) throws Throwable {

      logger.info("[------------开始进入拦截器-------------]");
        // 获取被拦截的目标全类名
        String className = pjp.getTarget().getClass().getName();
        // 获取当前正在使用的方法
        String name = pjp.getSignature().getName();
        // 获取目标类
        Class<?> clazz = Class.forName(className);
        // 增强类所有的方法
        Method[] methods = clazz.getMethods();

        for (Method method : methods) {
            // 当前遍历到的方法与正在使用的方法一样
            if (method.getName().equals(name)) {
                // 获取当前方法上的登录注解
                LoginRequired loginRequired = method.getAnnotation(LoginRequired.class);
                if (loginRequired!=null) {
                    logger.info("[------------开始进行拦截-------------]");
                    // 获取请求头里面的信息
                    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
                   
                  	/*登录业务逻辑验证*/
                  	/*登录业务逻辑验证*/
                  	/*登录业务逻辑验证*/
                  	
                    logger.info("登录验证成功,登录拦截到的方法:{}",name);
                    return pjp.proceed();
                }
            }
        }

        logger.info("未使用@LoginRequired进行登录验证,方法为:{}",name);
        return  pjp.proceed();

    }
}

4,在Controller层使用@LoginRequire注解即可进行登录验证

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39513430/article/details/104927861