[英]Log REST resource URL using Spring AspectJ
我正在使用Spring Boot開發REST API,我想使用Spring Aspect記錄客戶端檢索的資源的URL。 我的Aspect類具有以下代碼:
@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;
...
然后可以通過以下方法從before方法中檢索客戶端調用的原始URL:
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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.