`
270029666
  • 浏览: 7897 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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

 
阅读更多
转自http://bbs.java.ccidnet.com/read.php?tid=640304

最近一个项目客户要求能够监控用户对系统的详细操作步骤,比如某人在某时间删除了某个模块的某条数据,经过一番斟酌,决定用struts2的拦截器功能实现日志管理系统,因为系统是旧系统(SSH架构)了,用struts2就可以不用修改系统的原有的类或者方法,而且可以精确到用户的具体操作,并且所有的日志管理代码直接写在拦截器里即可。代码如下:
  Java代码
@SuppressWarnings("serial")
public class LogInterceptor extends AbstractInterceptor{ 
    private String logName;
    private String logContent;
    protected Logger log = Logger.getLogger(getClass()); 
 
    public void init() {
    }
    @Override
    public String intercept(ActionInvocation ai) throws Exception  {  
      Map session = ai.getInvocationContext().getSession();
      Object action = ai.getAction();
      String method = ai.getProxy().getMethod();
      try{
          if(StringUtils.isBlank(method)) method = "method"; 
          SysUser sysUser = (SysUser)session.get(Constants.SESSION_USER_KEY);
          String userName = ""; 
          if(sysUser!=null) userName = sysUser.getUserName();
          String currentTime = TimeHelper.getCurrentTime();
          String logContentHead = "用户"+userName+currentTime;  
          ai.invoke();//执行被拦截action
        
          if (action instanceof SysOrgAction) {
              if(method.equals("save")){
                  logName = "保存部门";
                  logContent = logContentHead +"保存部门:"+ai.getStack().findValue("sysOrg.orgName");  
                  log.info(logContent);
                  addSysLog(logName,logContent);
              }
              if(method.equals("delete")){  
                  logName = "删除部门";  
                  logContent = logContentHead +"删除"+((String[])(ai.getStack().findValue("flag_id"))).length+"条部门信息"; 
                  log.info(logContent);
                  addSysLog(logName,logContent);  
              }
          }
          if (action instanceof SysOrgForAdmAction) { 
              if(method.equals("save")){ 
                  logName = "保存单位"; 
                  logContent = logContentHead +"保存单位:"+ai.getStack().findValue("sysOrg.orgName");
                  log.info(logContent);
                  addSysLog(logName,logContent);
              } 
              if(method.equals("delete")){
                  logName = "删除单位"; 
                  logContent = logContentHead +"删除1条单位信息";
                  log.info(logContent); 
                  addSysLog(logName,logContent); 
              } 
          }
          if (action instanceof SysUserAction || action instanceof SysUserForAdmAction) {
              if(method.equals("save")){  
                  logName = "保存用户";
                  logContent = logContentHead +"保存用户:"+ai.getStack().findValue("sysUser.userName"); 
                  log.info(logContent);  
                  addSysLog(logName,logContent); 
              }
              if(method.equals("delete")){ 
                  logName = "删除用户";
                  logContent = logContentHead +"删除"+((String[])(ai.getStack().findValue("flag_id"))).length+"条用户信息";  
                  log.info(logContent);
                  addSysLog(logName,logContent);
              }
          } 
    
      }catch(Exception e){ 
          e.printStackTrace();  
      } 
      return Action.SUCCESS;
  }  
      
    
  private void addSysLog(String logName,String logContent){
      HttpServletRequest request = ServletActionContext.getRequest();
      SysLogService sysLogService = (SysLogService)ApplicationContextFactory.getApplicationContext().getBean("sysLogService");
      SysLog sysLog = new SysLog();
      sysLog.setLogName(logName); 
      sysLog.setLogContent(logContent);  
      sysLog.setLogType(Constants.LOG_TYPE_SYS); 
      sysLog.setLogTime(TimeHelper.getCurrentTime()); 
      sysLog.setLogIp(request.getRemoteAddr()); 
      sysLog.setLogKey(logName);
      sysLogService.saveLog(sysLog);
  } 
}
分享到:
评论

相关推荐

    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系统...

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

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

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

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

    Spring面试题

    2.可以使用容易提供的众多服务,如事务管理,消息服务等 3.容器提供单例模式支持 4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring...

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

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

    精通 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