AspectJ打开多个线程



我正在尝试使用AspectJ进行授权和请求-响应日志记录。但问题是它打开了两条线索。执行我的控制器和服务方法两次。任何帮助都会得到通知。

@Around("execution(* com.a.b.c.controller.*.*(..)) && @annotation(com.a.b.c.role.auth.ReadAuthorization) && args(request,obj)")
public Object before(ProceedingJoinPoint joinPoint,HttpServletRequest request,Object obj)      throws Throwable {
Object result = null;
if (!(request instanceof HttpServletRequest)) {
throw new RuntimeException("You are not authorized");
}

LoggingObject loggingObject = new LoggingObject();
loggingObject.setMethodName(MethodSignature.class.cast(joinPoint.getSignature()).getMethod().getName());
loggingObject.setRequestObject(obj);
try{
Object requestObject = joinPoint.proceed();
loggingObject.setResponseObject(requestObject);
log.info(mapperObj.writeValueAsString(loggingObject));
}catch(Exception e){
loggingObject.setResponseObject(e);
log.info(mapperObj.writeValueAsString(loggingObject));
}
if (auth.authorize(request.getHeader("id"),request.getHeader("token"))) {
result = joinPoint.proceed();
return result;
} else {
throw new RuntimeException("You are not authorized");

}
}

我冒着有根据的猜测的风险,尽管你在谈论线程时问题不清楚(请参阅我在评论中关于如何改进问题的问题(:

您的意思可能只是简单地说,目标方法执行两次,而不是方面创建两个线程,对吗?好吧,您的建议方法包含两个proceed()调用如果你自己调用目标方法两次,那么如果目标方法被执行两次,你为什么会感到惊讶?

我认为这应该能回答你的问题。

最新更新