SpringAop

JAR包

	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> <version>1.6.12</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.12</version> </dependency> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2</version> </dependency> </dependencies>

 

 

1.自定义注解切

1.创建切面Aspect  和通知Advice

package rrg.aoptest;

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
public class TestAop {
@Pointcut("@annotation(Admin)")
public void test(){

}

//Advice  spring aop中@Around @Before @After三个注解的区别@Before是在所拦截方法执行之前执行一段逻辑。@After 是在所拦截方法执行之后执行一段逻辑。@Around是可以同时在所拦截方法的前后执行一段逻辑。
@Before(value = "test()")
public String use(){
System.out.println("888888");
return "7777";
}
}

2.自定义admin注解

package rrg.aoptest;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*
* @author Admin
*
*/
@Retention(value = RetentionPolicy.RUNTIME)
@Target(value = { ElementType.METHOD})
public @interface Admin {

}

3.实现切面效果

package rrg.aoptest;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AopTestController {
@Admin
@RequestMapping("/aoptest")
public String add(){

return "6666";
}
}

 

 

2.execution 表达式切

1.创建切面Aspect  和通知Advice

package rrg.encryption;

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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import rrg.dao.RedisDao;
import rrg.response.Msg;
@Aspect
@Component
public class ControMethodBeforeExecution {
@Autowired
private RedisDao redisDao;

//拦截rrg包或所有子包下的所有类种以uop开头的所有方法
@Pointcut("execution(* rrg..*.uop*(..))")
public void methodBeforeExecution(){

}

 

//拦截方法需要执行的代码

//spring aop中@Around @Before @After三个注解的区别@Before是在所拦截方法执行之前执行一段逻辑。@After 是在所拦截方法执行之后执行一段逻辑。

//@Around是可以同时在所拦截方法的前后执行一段逻辑。
@Around("methodBeforeExecution()")
public Msg cheakLogin(ProceedingJoinPoint jp) {
//获取拦截方法的参数 注意 方法的参数对应Object数组的下标
Object[] args = jp.getArgs();
//获取被拦截方法的第一个参数
int userId=(int)args[0];
//获取被拦截方法的第二个参数
String token=(String)args[1];
String localtoken=redisDao.get("userId_"+userId);
Msg msg=null;
if(token.equals(localtoken)) {
try {
msg= (Msg)jp.proceed();
} catch (Throwable e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
return Msg.fail().add("err_code", "令牌失效");
}
return msg;

}

}

 

转载于:https://www.cnblogs.com/Superb1995/p/8697718.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值