将字符串从方面传递到 JointPoint

Pass a string from an aspect to the JointPoint

我有一个方面针对所有 Controller 类 中的每个方法执行。我的方面生成一个 UUID 并且我想在我的控制器中获取这个 ID,以便我将它传递给我的服务层和进一步的处理。我不确定如何将 UUID 从一个方面传递到 Controller

下面是看点

@Configuration
@Aspect
public class ApplicationAspect {



    @Before("execution(* com.spike.aop.arun.*Controller.*(..))")
    public void aspectForAllControllers() {
        System.out.println("Correlation ID generated");
        var correlationId = generateCorrelationId(); // need to pass this to controller

    }

    private String generateCorrelationId() {
        return UUID.randomUUID().toString();
    }
}

实现此目的的一种方法是使用 RequestContextHolder 并将生成的 UUID 设置为请求属性。

以下代码演示相同

@Before("execution(* com.spike.aop.arun.*Controller.*(..))")
public void aspectForAllControllers() {
    System.out.println("Correlation ID generated");
    String correlationId = generateCorrelationId(); 
    RequestContextHolder.getRequestAttributes().setAttribute("UUID", correlationId, RequestAttributes.SCOPE_REQUEST);

}

并访问控制器中的请求属性。

@GetMapping("/testUUID")
public void testUUID(HttpServletRequest request) {
    System.out.println("From Controller :"+request.getAttribute("UUID"));
}

RequestContextHolder.getRequestAttributes().getAttribute("UUID",RequestAttributes.SCOPE_REQUEST);