code as follows:
import org.aspectj.lang.JoinPoint; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; /** * Interceptor: Intercept the controller layer * @author zx * @date 2017-03-10 */ @Aspect @Component public class ControllerIntercerptor { private static final Logger logger = LoggerFactory.getLogger(ControllerIntercerptor.class); /** * Define interception rules: Intercept all classes under the com.zx.controller package that have methods annotated with @RequestMapping. */ @Pointcut("execution(* com.zx.controller..*(..)) and @annotation(org.springframework.web.bind.annotation.RequestMapping)") public void controllerMethodPointcut(){ } @Before("controllerMethodPointcut()") public void before(JoinPoint joinPoint) { System.out.println(joinPoint.getSignature().getName()); System.out.println("================@before(controllerMethodPointcut())"); } @After("controllerMethodPointcut()") public void After(JoinPoint joinPoint) { System.out.println(joinPoint.getSignature().getName()); System.out.println("================@After(controllerMethodPointcut())"); } @Around("controllerMethodPointcut()") public Object Around(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println(joinPoint.getSignature().getName()); System.out.println("================@Around(controllerMethodPointcut())"); return joinPoint.proceed(); } /** * Interceptor specific implementation * @param pjp * @return JsonResult (the execution result of the intercepted method, or an error message that needs to be logged in.) */ @Around("controllerMethodPointcut()") //Specify interceptor rules; you can also write "execution(* com.zx.........)" directly here public Object Interceptor(ProceedingJoinPoint pjp){ MethodSignature signature = (MethodSignature) pjp.getSignature(); Method method = signature.getMethod(); //Get the intercepted method String methodName = method.getName(); //Get the intercepted method name //Set<Object> allParams = new LinkedHashSet<>(); //Save all request parameters for output to the log System.out.println("================@Around(controllerMethodPointcut())"); Object result = null; Object[] args = pjp.getArgs(); for(Object arg : args){ System.out.println(arg); } // If everything is normal, continue to execute the intercepted method try { result = pjp.proceed(); } catch (Throwable e) { e.printStackTrace (); } return result; } }
Project address: https://github.com/zhangxia1030/spring-boot-example