gpt4 book ai didi

java - Spring Controller LoggingAspect不拦截方法

转载 作者:行者123 更新时间:2023-12-01 09:21:44 26 4
gpt4 key购买 nike

我有以下内容:

@Pointcut("execution(*com.shop.controller.OrderController.save(..))")
public void savingOrder() {
log.info("Saving order details");
}

@Before("savingOrder() && args(..,request)")
public void logSavingOrder(JoinPoint joinPoint, HttpServletRequest request){
log.info("Saving");
}

但是,日志永远不会显示。

当我尝试以下操作时:

@Pointcut("execution(* com.shop.controller.OrderController.saveOrder(..))")
public void savingOrder() {
log.info("Saving order details");/**/
}

@Before("savingOrder()")
public void logSavingOrder(JoinPoint joinPoint){
log.info("Saving order");
}

一切正常。但是,我需要访问 HttpServletRequest

关于我做错了什么有什么想法吗?

最佳答案

不要将其添加到拦截方法的方法签名中,请使用以下方法之一在拦截方法内部访问它:

如果 bean 是请求范围的,您可以 Autowiring HttpServletRequest,如下所示:

@Component
@Scope("request")
public class Foo {
@Autowired private HttpServletRequest request;

//
}

否则您可以按如下方式获取当前请求:

ServletRequestAttributes sra = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest req = sra.getRequest();

这在幕后使用了线程局部。

如果您使用 Spring MVC,这就是您所需要的。如果您没有使用 Spring MVC,那么您需要在 web.xml 中注册 RequestContextListener 或 RequestContextFilter。

关于java - Spring Controller LoggingAspect不拦截方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40129744/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com