Struts2拦截器实现日志管理系统 (同理实现权限,模块点击计数器等)

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


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


Java代码  收藏代码
  1. @SuppressWarnings("serial")  
  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 = "method";  
  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("save")){  
  26.                    logName = "保存部门";  
  27.                    logContent = logContentHead +"保存部门:"+ai.getStack().findValue("sysOrg.orgName");  
  28.                    log.info(logContent);  
  29.                    addSysLog(logName,logContent);  
  30.                }  
  31.                if(method.equals("delete")){  
  32.                    logName = "删除部门";  
  33.                    logContent = logContentHead +"删除"+((String[])(ai.getStack().findValue("flag_id"))).length+"条部门信息";  
  34.                    log.info(logContent);  
  35.                    addSysLog(logName,logContent);  
  36.                }  
  37.            }  
  38.            if (action instanceof SysOrgForAdmAction) {  
  39.                if(method.equals("save")){  
  40.                    logName = "保存单位";  
  41.                    logContent = logContentHead +"保存单位:"+ai.getStack().findValue("sysOrg.orgName");  
  42.                    log.info(logContent);  
  43.                    addSysLog(logName,logContent);  
  44.                }  
  45.                if(method.equals("delete")){  
  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("save")){  
  54.                    logName = "保存用户";  
  55.                    logContent = logContentHead +"保存用户:"+ai.getStack().findValue("sysUser.userName");  
  56.                    log.info(logContent);  
  57.                    addSysLog(logName,logContent);  
  58.                }  
  59.                if(method.equals("delete")){  
  60.                    logName = "删除用户";  
  61.                    logContent = logContentHead +"删除"+((String[])(ai.getStack().findValue("flag_id"))).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("sysLogService");  
  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. }