使用 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());
我正在使用 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());