使用 Spring AspectJ 记录 REST 资源 URL

Log REST resource URL using Spring AspectJ

我正在使用 Spring Boot 开发 REST API 我想记录客户端使用 Spring 方面检索的资源的 URL .我的 class 看点有以下代码:

@Component
@Aspect
public class Logs {

    @Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
    public void allResources() {}

    @Before("allResources()")
    public void apiRequestLog(JoinPoint jp) {    
        LogManager.getLogger(jp.getSignature().getDeclaringTypeName()).info("------------------------- o -------------------------");
        String log = jp.getSignature().getName() + " >>>";
        for (Object arg : jp.getArgs()) {
            log += "\n   ARG: " + arg;
        }
        LogManager.getLogger(jp.getSignature().getDeclaringTypeName()).info(log);

    }
}

我不知道如何将 RequestMapping 对象作为建议的参数传递,并获取 URL 的路径。

您可以让 Spring 将客户的请求注入您的方面:

@Component
@Aspect
public class Logs {
   @Autowired(required = false)
   private HttpServletRequest request;
...

客户端调用的原始 URL 然后可以通过以下方式从 before-method 中检索:

request.getRequestURL();

没有自动装配的替代方案:

@Around("isRestController()")
public Object logApiCall(final ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
    HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
    .getRequest();
    log.debug("{} {} from {}",
    request.getMethod(),
    request.getRequestURI(),
    request.getRemoteAddr());