aspectj打开多线程

z8dt9xmd  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(350)

我正在尝试使用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");

    }

}
xt0899hw

xt0899hw1#

我冒着一个有根据的猜测的风险,即使这个问题在你谈论线程时还不清楚(请参阅我在评论中提出的关于如何改进问题的问题):
您可能的意思是目标方法执行两次,而不是方面创建两个线程,对吗?好吧,你的建议方法有两个 proceed() 电话。如果目标方法被执行了两次,而您自己又调用了两次,您为什么会感到惊讶呢?
我想这应该能回答你的问题。

相关问题