public Object doInBusiness(ProceedingJoinPoint pjp) throws Throwable{
Object[] args = pjp.getArgs();
Class[] argsClass = new Class[args.length];//定义存放class的数组,用于Class类获取对应方法的参数
for(int i=0;i<args.length;i++){//循环的获取目标方法的参数类名,并放入class数组中
try {
Method m = (Method)args[i];//执行时抛出RuntimeException,抛出类型转换异常
} catch (RuntimeException e) {
String argClassName = e.getMessage().split(" ")[0];//根据截取异常信息获取目标方法的类名
argsClass[i] = Class.forName(argClassName);
}
}
String className = "";
try {
Method m = (Method)pjp.getTarget();
} catch (RuntimeException e) {
className = e.getMessage().split(" ")[0];//根据截取异常信息获取目标对象的类名
System.out.println(className);
}
Class objectClass = Class.forName(className);
Method method = objectClass.getMethod(pjp.getSignature().getName(),argsClass);//根据反射获取目标方法的Method
boolean isProcess = true;
Object retVal = null;
if(method.isAnnotationPresent(Permission.class)){//根据要访问的目标方法上的自定义Perssion注解信息判断是否有权限访问该方法
Permission permission = method.getAnnotation(Permission.class);
String model = permission.model();
String privilege = permission.privlege();
if(!"depart".equals(model)||!"add".equals(privilege)){
System.out.println("你没有有权限访问");
isProcess = false;
}
}
if(isProcess){
System.out.println("你有权限访问");
retVal = pjp.proceed();
}
System.out.println(retVal);
return retVal;
}
Object[] args = pjp.getArgs();
Class[] argsClass = new Class[args.length];//定义存放class的数组,用于Class类获取对应方法的参数
for(int i=0;i<args.length;i++){//循环的获取目标方法的参数类名,并放入class数组中
try {
Method m = (Method)args[i];//执行时抛出RuntimeException,抛出类型转换异常
} catch (RuntimeException e) {
String argClassName = e.getMessage().split(" ")[0];//根据截取异常信息获取目标方法的类名
argsClass[i] = Class.forName(argClassName);
}
}
String className = "";
try {
Method m = (Method)pjp.getTarget();
} catch (RuntimeException e) {
className = e.getMessage().split(" ")[0];//根据截取异常信息获取目标对象的类名
System.out.println(className);
}
Class objectClass = Class.forName(className);
Method method = objectClass.getMethod(pjp.getSignature().getName(),argsClass);//根据反射获取目标方法的Method
boolean isProcess = true;
Object retVal = null;
if(method.isAnnotationPresent(Permission.class)){//根据要访问的目标方法上的自定义Perssion注解信息判断是否有权限访问该方法
Permission permission = method.getAnnotation(Permission.class);
String model = permission.model();
String privilege = permission.privlege();
if(!"depart".equals(model)||!"add".equals(privilege)){
System.out.println("你没有有权限访问");
isProcess = false;
}
}
if(isProcess){
System.out.println("你有权限访问");
retVal = pjp.proceed();
}
System.out.println(retVal);
return retVal;
}