使用sping AOP 操作日志管理

 

[置顶] 使用sping AOP 操作日志管理

记录后台操作人员的登陆、退出、进入了哪个界面、增加、删除、修改等操作

数据库中建立一张SYSLOG表,使用Sping 的AOP实现日志管理,在Sping.xml中配置

   <!-- spring 获取配置文件中定义的bean -->

    <aop:aspectj-autoproxy proxy-target-class="true"/><!-- 开启切面编程功能 -->  

    <context:component-scan base-package="com.geeboo.wxbus.service.impl,com.geeboo.wxbus.interceptor"/>

<context:annotation-config/>

 

然后在interceptor包下创建一个MyInterceptor类,里面有anyMethod ()。doBefore(),doAfterReturning(),doAfterThrowing(),

doAfter(),doAround()等方法。

 

在doAround()中执行判断用户进行进入那个类并且那个方法,然后添加日志记录。

// 调用方法名称

String methodName =pjp.getSignature().getName();

//获取进入的类名

StringclassName=

pjp.getSignature().getDeclaringTypeName();

className =

className.substring(className.lastIndexOf(".") 1).trim();

 

[java]  view plain  copy
 
  1. package com.geeboo.wxbus.interceptor;  
  2.   
  3.   
  4.   
  5. import java.lang.reflect.Field;  
  6. import java.text.SimpleDateFormat;  
  7. import java.util.Date;  
  8. import java.util.HashMap;  
  9. import java.util.UUID;  
  10. import java.util.regex.Pattern;  
  11.   
  12. import net.sf.json.JSONObject;  
  13.   
  14. import org.aspectj.lang.ProceedingJoinPoint;  
  15. import org.aspectj.lang.annotation.After;  
  16. import org.aspectj.lang.annotation.AfterReturning;  
  17. import org.aspectj.lang.annotation.AfterThrowing;  
  18. import org.aspectj.lang.annotation.Around;  
  19. import org.aspectj.lang.annotation.Aspect;  
  20. import org.aspectj.lang.annotation.Before;  
  21. import org.aspectj.lang.annotation.Pointcut;  
  22. import org.jeecgframework.core.util.ContextHolderUtils;  
  23. import org.springframework.beans.factory.annotation.Autowired;  
  24. import org.springframework.stereotype.Component;  
  25.   
  26. import com.geeboo.wxbus.entity.FeedbackInfo;  
  27.   
  28. import com.geeboo.wxbus.entity.SnackCollect;  
  29. import com.geeboo.wxbus.entity.SysLog;  
  30. import com.geeboo.wxbus.entity.Tuser;  
  31. import com.geeboo.wxbus.entity.UserSuggest;  
  32. import com.geeboo.wxbus.pageModel.FeedbackInfoPage;  
  33. import com.geeboo.wxbus.pageModel.SnackCollectPage;  
  34. import com.geeboo.wxbus.pageModel.User;  
  35. import com.geeboo.wxbus.pageModel.UserSuggestPage;  
  36. import com.geeboo.wxbus.service.FeedbackInfoServiceI;  
  37. import com.geeboo.wxbus.service.SnackCollectServiceI;  
  38. import com.geeboo.wxbus.service.SysLogServiceI;  
  39. import com.geeboo.wxbus.service.UserServiceI;  
  40. import com.geeboo.wxbus.service.UserSuggestServiceI;  
  41.   
  42. @Aspect  
  43. @Component  
  44. public class MyInterceptor {  
  45.       
  46.     private SysLogServiceI logServiceI;//日志  
  47.     private UserServiceI userService;//用户  
  48.     private FeedbackInfoServiceI feedbackInfoService;//反馈  
  49.     private SnackCollectServiceI snackCollectService;//商店  
  50.     private UserSuggestServiceI userSuggestService;//用户建议  
  51.       
  52.     public UserServiceI getUserService() {  
  53.         return userService;  
  54.     }  
  55.     @Autowired  
  56.     public void setUserService(UserServiceI userService) {  
  57.         this.userService = userService;  
  58.     }  
  59.     public FeedbackInfoServiceI getFeedbackInfoService() {  
  60.         return feedbackInfoService;  
  61.     }  
  62.     @Autowired  
  63.     public void setFeedbackInfoService(FeedbackInfoServiceI feedbackInfoService) {  
  64.         this.feedbackInfoService = feedbackInfoService;  
  65.     }  
  66.     public SnackCollectServiceI getSnackCollectService() {  
  67.         return snackCollectService;  
  68.     }  
  69.     @Autowired  
  70.     public void setSnackCollectService(SnackCollectServiceI snackCollectService) {  
  71.         this.snackCollectService = snackCollectService;  
  72.     }  
  73.     public UserSuggestServiceI getUserSuggestService() {  
  74.         return userSuggestService;  
  75.     }  
  76.     @Autowired  
  77.     public void setUserSuggestService(UserSuggestServiceI userSuggestService) {  
  78.         this.userSuggestService = userSuggestService;  
  79.     }  
  80.     public SysLogServiceI getLogServiceI() {  
  81.         return logServiceI;  
  82.     }  
  83.     @Autowired  
  84.     public void setLogServiceI(SysLogServiceI logServiceI) {  
  85.         this.logServiceI = logServiceI;  
  86.     }  
  87.   
  88.     /** 
  89.      * 第一个* 代表任意的返回类型 (..) 所有参数 
  90.      */  
  91.     @Pointcut("execution(* com.geeboo.wxbus.service.impl.*.*(..))")  
  92.     private void anyMethod() {  
  93.     }; // 声明一个切入点  
  94.   
  95.     @Before("anyMethod() && args(object)")  
  96.     public void doBefore(Object object) {  
  97.         //System.out.println("前置通知" + object);  
  98.     }  
  99.   
  100.     @AfterReturning(pointcut = "anyMethod()", returning = "name")  
  101.     public void doAfterReturning(String name) {  
  102.         //System.out.println("后置通知:" + name);  
  103.     }  
  104.   
  105.     @AfterThrowing("anyMethod()")  
  106.     public void doAfterThrowing() {  
  107.         //System.out.println("例外通知");  
  108.     }  
  109.   
  110.     @After("anyMethod()  && args(object)" )  
  111.     public void doAfter(Object object) {  
  112.         //System.out.println("最终通知"+object);  
  113.     }  
  114.   
  115.     @Around("anyMethod()")  
  116.     public Object doAround(ProceedingJoinPoint pjp) throws Throwable { // 要执行pip.proceed方法  
  117.           
  118.         // 调用方法名称  
  119.           String methodName = pjp.getSignature().getName();  
  120.         //获取进入的类名  
  121.           String className = pjp.getSignature().getDeclaringTypeName();  
  122.           className = className.substring(className.lastIndexOf(".") + 1).trim();  
  123.            
  124.          if(className.equals("SysLogServiceImpl")||className.equals("TotalMsgServiceImpl")||className.equals("TotalUserServiceImpl")||className.equals("MessageServiceImpl")){  //如果是日志的就不用  
  125.              return pjp.proceed();  
  126.          }  
  127.           // 调用参数  
  128.           Object[] args = pjp.getArgs();  
  129.           Object object = null;  
  130.          // System.out.println("==============进去的方法"+methodName);  
  131.           if(Pattern.matches("(add|update|delete)[\\S]*",  
  132.                   methodName)) {  
  133.                 
  134.               String logMsg="";//日志消息内容  
  135.                  
  136.                 Tuser user=(Tuser) ContextHolderUtils.getSession().getAttribute("USER_SESSION");//获取用户名  
  137.                 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
  138.                 String time=sdf.format(new Date());//获取当前时间  
  139.                   
  140.                 //System.out.println("进入的类名"+className);  
  141.                   
  142.              JSONObject msg = new JSONObject();  
  143.               for (Object temp : args) {  
  144.                   Class<? extends Object> paramClazz = temp.getClass();  
  145.                      String classType = paramClazz.getName();  
  146.                      if (classType.equals("java.lang.String")) {  
  147.                       msg.put("key", temp);  
  148.                      } else if (classType.equals("java.util.HashMap")) {  
  149.                       msg.putAll((HashMap<?, ?>) temp);  
  150.                      } else if (classType.startsWith("com.")) {  
  151.                       try {  
  152.                        Field[] f = paramClazz.getDeclaredFields();  
  153.                        for (Field field : f) {  
  154.                         String fieldName = field.getName();  
  155.                         field.setAccessible(true);  
  156.                         msg.put(fieldName, field.get(temp));  
  157.                        }  
  158.                       } catch (SecurityException e) {  
  159.                        e.printStackTrace();  
  160.                       } catch (IllegalArgumentException e) {  
  161.                        e.printStackTrace();  
  162.                       }  
  163.                      }  
  164.               }  
  165.               //用户管理  
  166.               if(className.equals("UserServiceImpl")){    
  167.                     if(user!=null){  
  168.                         logMsg="用户名:"+user.getCname()+"-在-"+"操作用户";  
  169.                     }else{  
  170.                         logMsg="";  
  171.                     }  
  172.                     JSONObject msg1 = new JSONObject();//保存在JSON中然后添加进去  
  173.                     if(methodName.equals("update")){    //修改之前获取原来的数据  
  174.                         User u=new User();  
  175.                         u.setCid(msg.getString("cid").toString());//获取删除的主键  
  176.                         Tuser lastUser=userService.get(u);  
  177.                         msg1.put("user", lastUser);       
  178.                         logMsg=logMsg+"-进入修改!修改前数据为:"+msg1+"****************修改后数据为:"+msg;  
  179.                     }else if(methodName.equals("delete")){  
  180.                         User u=new User();  
  181.                         u.setCid(msg.getString("key").toString());//获取删除的主键  
  182.                         Tuser lastUser=userService.get(u);  
  183.                         msg1.put("user", lastUser);  
  184.                         logMsg=logMsg+"-进入删除操作值为:"+msg1;  
  185.                     }  
  186.                       
  187.                 }  
  188.               //反馈管理  
  189.               else if(className.equals("FeedbackInfoServiceImpl")){  
  190.                     logMsg=user.getCname()+"-在-"+"操作反馈信息";  
  191.                     JSONObject msg1 = new JSONObject();//保存在JSON中然后添加进去  
  192.                     if(methodName.equals("update")){        //进入修改界面                          
  193.                         FeedbackInfoPage f=new FeedbackInfoPage();  
  194.                         //System.out.println("反馈信息"+msg);  
  195.                         f.setFeedbackId(msg.getString("feedbackId"));  
  196.                         FeedbackInfo lastFeebackInfo=feedbackInfoService.get(f);                      
  197.                         msg1.put("feebackInfo", lastFeebackInfo);  
  198.                     }else if(methodName.equals("delete")){  
  199.                         FeedbackInfoPage f=new FeedbackInfoPage();  
  200.                         //System.out.println("反馈信息"+msg);  
  201.                         f.setFeedbackId(msg.getString("key"));  
  202.                         FeedbackInfo lastFeebackInfo=feedbackInfoService.get(f);                      
  203.                         msg1.put("feebackInfo", lastFeebackInfo);  
  204.                     }  
  205.                     if(methodName.equals("update")){  
  206.                         logMsg=logMsg+"-进入修改!修改前数据为:"+msg1+"****************修改后数据为:"+msg;  
  207.                     }else if(methodName.equals("delete")){  
  208.                         logMsg=logMsg+"-进入删除操作值为:"+msg1;  
  209.                     }                     
  210.                 }  
  211.               //用户建议管理  
  212.               else if(className.equals("UserSuggestServiceImpl")){  
  213.                     logMsg=user.getCname()+"-在-"+"操作用户建议";  
  214.                     JSONObject msg1 = new JSONObject();//保存在JSON中然后添加进去  
  215.                     if(methodName.equals("delete")){  
  216.                         UserSuggestPage suggest=new UserSuggestPage();  
  217.                         //System.out.println("用户建议"+msg);  
  218.                         suggest.setSuggestId(msg.getString("key"));  
  219.                         UserSuggest lastSuggest=userSuggestService.get(suggest);  
  220.                         msg1.put("suggest", lastSuggest);  
  221.                         logMsg=logMsg+"-进入删除操作值为:"+msg1;  
  222.                     }                     
  223.                       
  224.                 }  
  225.               //店家管理  
  226.               else if(className.equals("SnackCollectServiceImpl")){  
  227.                     logMsg=user.getCname()+"-在-"+"操作商店";  
  228.                     JSONObject msg1 = new JSONObject();//保存在JSON中然后添加进去  
  229.                     if(methodName.equals("update")){  
  230.                         SnackCollectPage snackCollect=new SnackCollectPage();  
  231.                         //System.out.println("店家管理"+msg);  
  232.                         snackCollect.setSnackCollectId(msg.getString("snackCollectId"));  
  233.                         SnackCollect lastSnack=snackCollectService.get(snackCollect);  
  234.                         msg1.put("snack", lastSnack);  
  235.                         logMsg=logMsg+"-进入修改!修改前数据为:"+msg1+"****************修改后数据为:"+msg;  
  236.                         //System.out.println("店家管理修改后的数据"+logMsg);  
  237.                     }else if(methodName.equals("delete")){  
  238.                         SnackCollectPage snackCollect=new SnackCollectPage();  
  239.                         //System.out.println("店家管理"+msg);  
  240.                         snackCollect.setSnackCollectId(msg.getString("key"));  
  241.                         SnackCollect lastSnack=snackCollectService.get(snackCollect);  
  242.                         msg1.put("snack", lastSnack);  
  243.                         logMsg=logMsg+"-进入删除操作值为:"+msg1;  
  244.                     }                         
  245.                 }  
  246.                 if(methodName.equals("add")){           //进入获取添加方法  
  247.                     logMsg=logMsg+"-进入添加操作值为:"+msg;  
  248.                 }  
  249.                             
  250.               SysLog log=new SysLog();  
  251.               log.setLogId(UUID.randomUUID().toString());  
  252.               log.setLogMsg(logMsg);  
  253.               log.setLogTime(time);  
  254.               logServiceI.add(log);  
  255.           }  
  256.         return pjp.proceed();  
  257.     }  
  258.   
  259. }  

猜你喜欢

转载自it1990eye0920.iteye.com/blog/2341655