/**
* 数据权限 拦截器
*/
@Aspect
@Component
public class DataPermissInterceptor {
private static final Logger log = LoggerFactory.getLogger(PermissInterceptor.class);
//定义切点
@Pointcut("@annotation(net.fxft.antation.DataPermissAnn) ")
public void point() {}
/**
* 环绕通知
* @param pjp
* @return
* @throws Throwable
*/
@Around("point()")
public Object trackInfo(ProceedingJoinPoint pjp) throws Throwable {
String declaringTypeName = pjp.getSignature().getDeclaringTypeName();
String methodName = pjp.getSignature().getName();
Object[] args = pjp.getArgs();
//获取代理的对象 (也就是这个方法所在内存中的对象)
// Object obj = pjp.getThis();
Object [] params =new Object[]{} ;
String sql ="";
int i = 0 ;
for(Object o :args){
if(o instanceof Object[]){
params= (Object[]) o;
}else if(o instanceof String){
sql=(String) o;
args[i] = "xingzhi";
}
i++;
}
StringBuilder spendTimeLog=new StringBuilder("方法名称:").append(declaringTypeName).append(".").append(methodName).append("() 耗时为:");
Thread thread = Thread.currentThread();
StackTraceElement[] stackTrace = thread.getStackTrace();
for(StackTraceElement e: stackTrace){
System.out.println(e);
if(e.getMethodName().equals("queryPermissDto")){
System.out.println(e.getClassName()+",方法名:"+e.getMethodName()+",代码行数:"+e.getLineNumber()+"");
}
}
return pjp.proceed(args); //如果不带args就是用原来的参数
}
}