详解弹簧引导中使用AOP统一处理Web请求日志

  

在春天引导中,简单几步,使用spring AOP实现一个拦截器:

  

<强> 1,引入依赖:

        & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-aop   & lt;/dependency>            & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-aop   & lt;/dependency>之前      

<强>,2,创建拦截器类(在该类中,定义了拦截规则:拦截com.xjj.web.controller包下面的所有类中,有@RequestMapping注解的方法):

     /* *   *拦截器:记录用户操作日志,检查用户是否登录……   * @author XuJijun   */@Aspect   @ component   公开课ControllerInterceptor {   私有静态最终日志记录器=LoggerFactory.getLogger (ControllerInterceptor.class);      @ value (" $ {spring.profiles} ")   私人字符串env;/* *   *定义拦截规则:拦截com.xjj.web.controller包下面的所有类中,有@RequestMapping注解的方法。   */@Pointcut(“执行(* com.xjj.web.controller . . *(. .))和@annotation (org.springframework.web.bind.annotation.RequestMapping)”)   公共空间controllerMethodPointcut () {}/* *   *拦截器具体实现   * @param pjp   * @return JsonResult(被拦截方法的执行结果,或需要登录的错误提示)。   */@Around (“controllerMethodPointcut())//指定拦截器规则;也可以直接把“执行(* com.xjj………)”写进这里   公共对象拦截器(ProceedingJoinPoint pjp) {   长beginTime=System.currentTimeMillis ();   MethodSignature签名=(MethodSignature) pjp.getSignature ();   方法方法=signature.getMethod ();//获取被拦截的方法   字符串methodName=method.getName ();//获取被拦截的方法名      Set,allParams=new LinkedHashSet<的在();//保存所有请求参数,用于输出到日志中      logger.info(“请求开始,方法:{}”,methodName);      对象的结果=零;      对象[]参数=pjp.getArgs ();   (对象参数:args) {//logger.debug(“参数:{}”,arg);   如果(arg instanceof Map<& # 63; & # 63;祝辞){//提取方法中地图的参数,用于记录进日志中   @SuppressWarnings (“unchecked”)   Object> Map<字符串;地图=(Map<字符串,Object>)参数;      allParams.add(地图);   }else if (arg instanceof HttpServletRequest) {   HttpServletRequest请求=(HttpServletRequest)参数;   如果(isLoginRequired(方法)){   如果(! isLogin(请求)){   结果=new JsonResult (ResultCode。NOT_LOGIN”,该操作需要登录!去登录吗? \ n \ n(不知道登录账号?请联系老许。)”,零);   }   }//获取查询字符串或发布表单数据参数   Map之前         /* *   *拦截器:记录用户操作日志,检查用户是否登录……   * @author XuJijun   */@Aspect   @ component   公开课ControllerInterceptor {   私有静态最终日志记录器=LoggerFactory.getLogger (ControllerInterceptor.class);      @ value (" $ {spring.profiles} ")   私人字符串env;/* *   *定义拦截规则:拦截com.xjj.web.controller包下面的所有类中,有@RequestMapping注解的方法。   */@Pointcut(“执行(* com.xjj.web.controller . . *(. .))和@annotation (org.springframework.web.bind.annotation.RequestMapping)”)   公共空间controllerMethodPointcut () {}/* *   *拦截器具体实现   * @param pjp   * @return JsonResult(被拦截方法的执行结果,或需要登录的错误提示)。   */@Around (“controllerMethodPointcut())//指定拦截器规则;也可以直接把“执行(* com.xjj .........)”写进这里   公共对象拦截器(ProceedingJoinPoint pjp) {   长beginTime=System.currentTimeMillis ();   MethodSignature签名=(MethodSignature) pjp.getSignature ();   方法方法=signature.getMethod ();//获取被拦截的方法   字符串methodName=method.getName ();//获取被拦截的方法名      Set

详解弹簧引导中使用AOP统一处理Web请求日志

Copyright © 2020-2023 feiqueyun.cn. All Rights Reserved. 肥雀云_南京肥雀信息技术有限公司版权所有 南京肥雀信息技术有限公司 苏ICP备16063723号-5