Struts2拦截器实现日志管理系统

最近一个项目客户要求能够监控用户对系统的详细操作步骤,比如某人在某时间删除了某个模块的某条数据,经过一番斟酌,决定用struts2的拦截器功能实现日志管理系统,因为系统是旧系统(SSH架构)了,用struts2就可以不用修改系统的原有的类或者方法,而且可以精确到用户的具体操作,并且所有的日志管理代码直接写在拦截器里即可。代码如下:


代码只是当时写的一个简单测试例子,可以进行优化,将各个acton及对应的方法及操作等都可以进行配置,如配置到一个xml文件当中,以后系统中新增加了action去修改xml文件就可以了。这样就不用去写大量的if,也不用每次有新增action来改日志管理系统的代码了。


Java代码 收藏代码
  1. @SuppressWarnings("serial")
  2. publicclassLogInterceptorextendsAbstractInterceptor{
  3. privateStringlogName;
  4. privateStringlogContent;
  5. protectedLoggerlog=Logger.getLogger(getClass());
  6. publicvoidinit(){
  7. }
  8. @Override
  9. publicStringintercept(ActionInvocationai)throwsException{
  10. Mapsession=ai.getInvocationContext().getSession();
  11. Objectaction=ai.getAction();
  12. Stringmethod=ai.getProxy().getMethod();
  13. try{
  14. if(StringUtils.isBlank(method))method="method";
  15. SysUsersysUser=(SysUser)session.get(Constants.SESSION_USER_KEY);
  16. StringuserName="";
  17. if(sysUser!=null)userName=sysUser.getUserName();
  18. StringcurrentTime=TimeHelper.getCurrentTime();
  19. StringlogContentHead="用户"+userName+currentTime;
  20. ai.invoke();//执行被拦截action
  21. if(actioninstanceofSysOrgAction){
  22. if(method.equals("save")){
  23. logName="保存部门";
  24. logContent=logContentHead+"保存部门:"+ai.getStack().findValue("sysOrg.orgName");
  25. log.info(logContent);
  26. addSysLog(logName,logContent);
  27. }
  28. if(method.equals("delete")){
  29. logName="删除部门";
  30. logContent=logContentHead+"删除"+((String[])(ai.getStack().findValue("flag_id"))).length+"条部门信息";
  31. log.info(logContent);
  32. addSysLog(logName,logContent);
  33. }
  34. }
  35. if(actioninstanceofSysOrgForAdmAction){
  36. if(method.equals("save")){
  37. logName="保存单位";
  38. logContent=logContentHead+"保存单位:"+ai.getStack().findValue("sysOrg.orgName");
  39. log.info(logContent);
  40. addSysLog(logName,logContent);
  41. }
  42. if(method.equals("delete")){
  43. logName="删除单位";
  44. logContent=logContentHead+"删除1条单位信息";
  45. log.info(logContent);
  46. addSysLog(logName,logContent);
  47. }
  48. }
  49. if(actioninstanceofSysUserAction||actioninstanceofSysUserForAdmAction){
  50. if(method.equals("save")){
  51. logName="保存用户";
  52. logContent=logContentHead+"保存用户:"+ai.getStack().findValue("sysUser.userName");
  53. log.info(logContent);
  54. addSysLog(logName,logContent);
  55. }
  56. if(method.equals("delete")){
  57. logName="删除用户";
  58. logContent=logContentHead+"删除"+((String[])(ai.getStack().findValue("flag_id"))).length+"条用户信息";
  59. log.info(logContent);
  60. addSysLog(logName,logContent);
  61. }
  62. }
  63. }catch(Exceptione){
  64. e.printStackTrace();
  65. }
  66. returnAction.SUCCESS;
  67. }
  68. /**
  69. *插入系统日志
  70. *@paramlogName
  71. *@paramlogContent
  72. */
  73. privatevoidaddSysLog(StringlogName,StringlogContent){
  74. HttpServletRequestrequest=ServletActionContext.getRequest();
  75. SysLogServicesysLogService=(SysLogService)ApplicationContextFactory.getApplicationContext().getBean("sysLogService");
  76. SysLogsysLog=newSysLog();
  77. sysLog.setLogName(logName);
  78. sysLog.setLogContent(logContent);
  79. sysLog.setLogType(Constants.LOG_TYPE_SYS);
  80. sysLog.setLogTime(TimeHelper.getCurrentTime());
  81. sysLog.setLogIp(request.getRemoteAddr());
  82. sysLog.setLogKey(logName);
  83. sysLogService.saveLog(sysLog);
  84. }
  85. }

你可能感兴趣的:(struts2拦截器)