`
TechBirds
  • 浏览: 82057 次
文章分类
社区版块
存档分类
最新评论

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. }
分享到:
评论

相关推荐

    S2SH项目整体系统架构

    2、拦截器实现用户权限检查功能 3、拦截器自动生成日志 4、未登录非法访问页面检测 5、三种方式日志的生成 6、页面访问计数 7、选中页面对应的帮助页面实现 8、根据页面编号或名称跳转页面 9、数据库连接池 ...

    低清版 大型门户网站是这样炼成的.pdf

    2.6.1 struts 2内建拦截器介绍 95 2.6.2 定义和使用拦截器栈 97 2.6.3 使用自定义拦截器 98 2.7 小结 100 第3章 struts 2标签库详解与ajax技术应用 103 3.1 struts 2主题与模板 103 3.2 struts 2控制标签详解 ...

    Java Web程序设计教程

    第15章图书馆管理系统 294 15.1系统功能解析 294 15.2系统数据库设计 295 15.2.1数据库分析 295 15.2.2数据表关联关系分析 298 15.3系统框架搭建 300 15.3.1创建工程 300 15.3.2工程目录结构 300 15.4系统...

    java项目之hrm人事管理项目(java毕业设计)

    2、后台:Struts2、动态代理、Mybatis框架、log4J日志框架、jstl 、jstl自定义分页标签、代码机器人、Dwr、POI(实现Excel文件的导入导出)等 3、数据库:Mysql 4、服务器:Tomcat 项目中涉及的功能: 1、项目以及...

    Spring面试题

    4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入...

    百度地图毕业设计源码-FutureStudio:这是在Struts2、Hibernate3、Spring3上构建的J2ee项目

    工程的前身是我的毕业设计,新航线图书销售管理系统,经过几轮的升级,已经是一个庞大的工程了。为了提供代码的可维护性性,对源码进行了工程拆分。 src目录下: 工程分为以下 01 common 基础源码工程,提供了基础类...

    应用级产品开发平台APDPlat.zip

    2)、前端控制器使用Struts2。 3)、IOC容器使用Spring。 4)、ORM使用JPA,默认实现是Hibernate。 5)、内置搜索(OSEM)使用Compass。 6)、认证授权使用SpringSecurity。 7)、代码生成使用Freemarker。 8)、日志...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     9.2 利用拦截器(Interceptor)生成审计日志  9.3 Hibernate的事件处理机制  9.4 批量处理数据  9.4.1 通过Session来进行批量操作  9.4.2 通过StatelessSession来进行批量操作  9.4.3 通过HQL来进行批量操作 ...

    Spring攻略(第二版 中文高清版).part2

    8.3 用处理程序拦截器拦截请求 297 8.3.1 问题 297 8.3.2 解决方案 298 8.3.3 工作原理 298 8.4 解析用户区域 302 8.4.1 问题 302 8.4.2 解决方案 302 8.4.3 工作原理 302 8.5 外部化区分区域的...

    Spring攻略(第二版 中文高清版).part1

    8.3 用处理程序拦截器拦截请求 297 8.3.1 问题 297 8.3.2 解决方案 298 8.3.3 工作原理 298 8.4 解析用户区域 302 8.4.1 问题 302 8.4.2 解决方案 302 8.4.3 工作原理 302 8.5 外部化区分区域的...

Global site tag (gtag.js) - Google Analytics