Struts2拦截器实现日志管理系统 下载本文

内容发布更新时间 : 2024/12/28 10:38:42星期一 下面是文章的全部内容请认真阅读。

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

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

代码只是当时写的一个简单测试例子,可以进行优化,将各个acton及对应的方法及操作等都可以进行配置,如配置到一个xml文件当中, 以后系统中新增加了action去修改xml文件就可以了。这样就不用去写大量的if,也不用每次有新增action来改日志管理系统的代码了。 Java代码 1. @SuppressWarnings(\) 2. public class LogInterceptor extends AbstractInterceptor{ 3. private String logName; 4. private String logContent; 5. protected Logger log = Logger.getLogger(getClass()); 6. 7. public void init() { 8. } 9. 10. @Override 11. public String intercept(ActionInvocation ai) throws Exception { 12. Map session = ai.getInvocationContext().getSession(); 13. Object action = ai.getAction(); 14. String method = ai.getProxy().getMethod(); 15. try{ 16. if(StringUtils.isBlank(method)) method = \hod\; 17. SysUser sysUser = (SysUser)session.get(Constants.SESSION_USER_KEY); 18. String userName = \; 19. if(sysUser!=null) userName = sysUser.getUserName(); 20. String currentTime = TimeHelper.getCurrentTime(); 21. String logContentHead = \用户\+userName+currentTime; 22. ai.invoke();//执行被拦截action 23. 24. if (action instanceof SysOrgAction) { 25. if(method.equals(\)){ 26. logName = \保存部门\; 27. logContent = logContentHead +\保存部门:\+ai.getStack().findValue(\); 28. log.info(logContent); 29. addSysLog(logName,logContent); 30. } 31. if(method.equals(\)){ 32. logName = \删除部门\; 33. logContent = logContentHead +\删除\+((String[])(ai.getStack().findValue(\))).length+\条部门信息\; 34. log.info(logContent); 35. addSysLog(logName,logContent); 36. } 37. } 38. if (action instanceof SysOrgForAdmAction) { 39. if(method.equals(\)){ 40. logName = \保存单位\; 41. logContent = logContentHead +\保存单位:\+ai.getStack().findValue(\); 42. log.info(logContent); 43. addSysLog(logName,logContent); 44. } 45. if(method.equals(\)){ 46. logName = \删除单位\; 47. logContent = logContentHead +\删除1条单位信息\; 48. log.info(logContent); 49. addSysLog(logName,logContent); 50. } 51. } 52. if (action instanceof SysUserAction || action instanceof SysUserForAdmAction) { 53. if(method.equals(\)){ 54. logName = \保存用户\; 55. logContent = logContentHead +\保存用户:\+ai.getStack().findValue(\); 56. log.info(logContent); 57. addSysLog(logName,logContent); 58. } 59. if(method.equals(\)){ 60. logName = \删除用户\; 61. logContent = logContentHead +\删除\+((String[])(ai.getStack().findValue(\))).length+\条用户信息\; 62. log.info(logContent); 63. addSysLog(logName,logContent); 64. } 65. } 66. 67. }catch(Exception e){ 68. e.printStackTrace(); 69. } 70. return Action.SUCCESS; 71. } 72. 73. /** 74. * 插入系统日志 75. * @param logName 76. * @param logContent 77. */ 78. private void addSysLog(String logName,String logContent){ 79. HttpServletRequest request = ServletActionContext.getRequest(); 80. SysLogService sysLogService = (SysLogService)ApplicationContextFactory.getApplicationContext().getBean(\sLogService\); 81. SysLog sysLog = new SysLog(); 82. sysLog.setLogName(logName); 83. sysLog.setLogContent(logContent); 84. sysLog.setLogType(Constants.LOG_TYPE_SYS); 85. sysLog.setLogTime(TimeHelper.getCurrentTime()); 86. sysLog.setLogIp(request.getRemoteAddr()); 87. sysLog.setLogKey(logName); 88. sysLogService.saveLog(sysLog); 89. } 90. }