将字符串从方面传递到 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);
我有一个方面针对所有 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);