本文共 3279 字,大约阅读时间需要 10 分钟。
在目标类中能够插入切面的一个点。
一个切面并不需要通知应用的所有连接点,切点有助于缩小切面所通知的连接点范围。
切点其实是定义了需要在哪些连接点上执行通知。切面的工作被称为通知,通知定义了切面是什么以及何时使用。
降低了描述切面要完成的工作,通知还姐姐了何时执行这个而工作的问题,5种通知类型。切面是通知和切点的结合,通知和切点共同定义了切面的全部内容。定义是什么,在何时和何处完成其功能。
将其应用至所有需要加上 日志记录 的模块对应的Controller的操作方法上!!
//保存日志 private void saveLog(ProceedingJoinPoint point,Long time){ MethodSignature signature= (MethodSignature) point.getSignature(); Method method=signature.getMethod(); SysLogEntity logEntity=new SysLogEntity(); //获取请求操作的描述信息 LogAnnotation logAnnotation=method.getAnnotation(LogAnnotation.class); if (logAnnotation!=null){ logEntity.setOperation(logAnnotation.value()); } //获取操作方法名 String className=point.getTarget().getClass().getName(); String methodName=signature.getName(); logEntity.setMethod(new StringBuilder(className).append(".").append(methodName).append("()").toString()); //获取请求参数 Object[] args=point.getArgs(); String params=new Gson().toJson(args[0]); logEntity.setParams(params); //获取ip logEntity.setIp(IPUtil.getIpAddr(HttpContextUtils.getHttpServletRequest())); //获取剩下的参数 logEntity.setCreateDate(DateTime.now().toDate()); String userName=ShiroUtil.getUserEntity().getUsername(); logEntity.setUsername(userName); //执行时间 logEntity.setTime(time); sysLogService.save(logEntity); }}
package com.debug.pmp.server.annotation;import java.lang.annotation.*;/** * Created by Administrator on 2019/8/5. */@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface LogAnnotation { String value() default "";}
//保存日志 private void saveLog(ProceedingJoinPoint point,Long time){ MethodSignature signature= (MethodSignature) point.getSignature(); Method method=signature.getMethod(); SysLogEntity logEntity=new SysLogEntity(); //获取请求操作的描述信息 LogAnnotation logAnnotation=method.getAnnotation(LogAnnotation.class); if (logAnnotation!=null){ logEntity.setOperation(logAnnotation.value()); } //获取操作方法名 String className=point.getTarget().getClass().getName(); String methodName=signature.getName(); logEntity.setMethod(new StringBuilder(className).append(".").append(methodName).append("()").toString()); //获取请求参数 Object[] args=point.getArgs(); String params=new Gson().toJson(args[0]); logEntity.setParams(params); //获取ip logEntity.setIp(IPUtil.getIpAddr(HttpContextUtils.getHttpServletRequest())); //获取剩下的参数 logEntity.setCreateDate(DateTime.now().toDate()); String userName=ShiroUtil.getUserEntity().getUsername(); logEntity.setUsername(userName); //执行时间 logEntity.setTime(time); sysLogService.save(logEntity); }}
//清除 @ResponseBody @RequestMapping("/truncate") @RequiresPermissions("sys:log:truncate") public BaseResponse truncate(){ BaseResponse response=new BaseResponse(StatusCode.Success); try { sysLogService.truncate(); }catch (Exception e){ response=new BaseResponse(StatusCode.Fail.getCode(),e.getMessage()); } return response; }
转载地址:http://hatgi.baihongyu.com/