//定义注释 @QswdLog 设置成员属性 描述 和 类型 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface QswdLog { //描述 String ms() default ""; // 执行方法类型 LogType type() default LogType.OTHER; }
public enum LogType { /** * 操作类型 数据量太少 无所谓 int String */ OTHER("其他操作"), DELETE("删除操作"), SELECT("查询操作"), UPDATE("更新操作"), INSERT("插入操作"); private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } LogType(String s) { this.value = s; } }
// aop环绕通知处理方式
@Around("@annotation(com.example.qswd.annotation.log.QswdLog)") public Object doAroundGame(ProceedingJoinPoint proceedingJoinPoint) throws Throwable { // 获取 注解实例 QswdLog qswdLog = ((MethodSignature) proceedingJoinPoint.getSignature()).getMethod().getAnnotation(QswdLog.class); // 获取 request HttpServletRequest request = ServletRequestAttributes.class.cast(RequestContextHolder.getRequestAttributes()).getRequest(); // 获取请求参数 Map<String, String[]> parameterMap = request.getParameterMap(); Iterator<Map.Entry<String, String[]>> iterator = parameterMap.entrySet().iterator(); StringBuilder stringBuilder = new StringBuilder(); while (iterator.hasNext()) { Map.Entry<String, String[]> next = iterator.next(); stringBuilder.append(next.getKey() + " : " + next.getValue()[0] + ","); } //new 日志实体类 Systemlog systemlog = new Systemlog(); //自己封装的ip 可以百度下 systemlog.setoIp(OtherUtil.getIp(request)); systemlog.setUserZh(OtherUtil.getLoginUser(request).getUserZh()); systemlog.setCreateTime(new Date()); systemlog.setUserName(OtherUtil.getLoginUser(request).getUserName()); systemlog.setoUrl(request.getRequestURI()); systemlog.setoType(qswdLog.type().getValue()); systemlog.setOdesc(qswdLog.ms() + ","+stringBuilder.toString() + proceedingJoinPoint.proceed()); systemlogService.SaveSystemlog(systemlog); //接口返回的数据 return proceedingJoinPoint.proceed(); }
//目前 我的注解都用在controller的方法上 接口 内容就不展示了
/** * 生成采购订单 */ @QswdLog(ms = "采购订单的生成", type = LogType.INSERT) @RequestMapping("/generatePurchase.html") @ResponseBody public String generatePurchase(String idList, HttpServletRequest request) { }