AOP过滤拦截,比如只有登陆用户可以访问方法,或方法前后必须调用的方法

1,必须先在POM.xml加入依赖
<!--aop,过滤器,拦截器,比如让http请求必须在登陆的情况下才能访问方法;1,引入依赖;2,在项目中建立一个aspect文件夹(包);3,建立一个HttpAspect类,注解为@Aspect-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
</dependency>

2,
package com.deng.hongbao.aspect;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

@Aspect
@Component//引入到spring容器里去,以便其它类可以引入
public class HttpAspect {

// 1,@Before 执行方法前执行先执行这个方法;使用了aspect会execution执行对所有的public方法拦截,这里是拦截com.deng.hongbao.web.HongBaoController.add(..)具体到了add这个方法add(..)加两个点表示方法里不管是任何参数都会被拦截
// @Before("execution(public * com.deng.hongbao.web.HongBaoController.add(..))")
// public void log(){
// System.out.println("在执行add()前,会先打印log()拦截器,在这个方法里可以判断用户是否登陆,如果登录,则可以访问,否则拦截直接return");
// }

// 2,拦截HongBaoController类里的所有方法
/*@Before("execution(public * com.deng.hongbao.web.HongBaoController.*(..))")
public void log(){
System.out.println("在执行add()前,会先打印log()拦截器,在这个方法里可以判断用户是否登陆,如果登录,则可以访问,否则拦截直接return");
}*/

// 3,被拦截的类方法执行完后会执行这个方法
/*@After("execution(public * com.deng.hongbao.web.HongBaoController.*(..))")
public void doAfter(){
System.out.println("在执行被拦截的类的所有方法后,会执行这里这个方法");
}*/

// 4,综上,2和3点发一有重复代码"execution(public * com.deng.hongbao.web.HongBaoController.*(..))",需要进行改造,注释上述代码
@Pointcut("execution(public * com.deng.hongbao.web.HongBaoController.*(..))")
public void logs(){
}

@Before("logs()")
public void doBefore(){
System.out.println("类被拦截,执行方法前先执行这里的方法");
}

@After("logs()")
public void doAfters(){
System.out.println("类被拦截,执行方法后会执行这里的这个方法");
}
}
posted @ 2020-07-26 17:48  火源  阅读(439)  评论(0编辑  收藏  举报