@Aspect
@Component
public class GrantActionAspect {
//相当于一个被切入点,指master包下的所有方法
@Pointcut("within(ps.service.master..*)")
private void masterMethod() {
}
//masterMethod相当于被切入点的id,所有的通知要织入该切入点只写该切入点的ID即可
@Before("masterMethod()")
public void checkGrant() throws Exception {
}
// 拦截对目标对象方法调用
@Around("com.crane.aspect.LoggerAspect.aroundPointCut()")
public Object doLoggerPointCut(ProceedingJoinPoint jp) throws Throwable {
// 获取连接点的方法签名对象
MethodSignature joinPointObject = (MethodSignature) jp.getSignature();
// 连接点对象的方法
Method method = joinPointObject.getMethod();
// 连接点方法方法名
String name = method.getName();
Class<?>[] parameterTypes = method.getParameterTypes();
// 获取连接点所在的目标对象
Object target = jp.getTarget();
// 获取目标方法
method = target.getClass().getMethod(name, parameterTypes);
// 返回@AroundPointCut的注释对象
AroundPointCut joinPoint = method.getAnnotation(AroundPointCut.class);
if (!joinPoint.accessRead()) {
throw new ApplicationException("没有权限!");
}
return jp.proceed();
}
}