Spring ControllerLoggingAspect不拦截该方法

时间:2016-10-19 11:08:50

标签: java spring spring-boot

我有以下内容:

@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

一切正常。但是,我需要访问SELECT count(*) FROM tbl --962060; SELECT count(*) FROM tbl WHERE (REGEXP_like(A,'[^0-9]') OR REGEXP_like(B,'[^0-9]') ) ; --17 SELECT count(*) FROM tbl WHERE (REGEXP_like(A,'[0-9]') and REGEXP_like(B,'[0-9]') ) ; --962060

关于我做错的任何想法?

1 个答案:

答案 0 :(得分:1)

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

如果bean是请求作用域,您可以自动装配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。