Struts2攔截器實現日志管理系統

jopen 10年前發布 | 28K 次閱讀 Struts2 Web框架

一個項目客戶要求能夠監控用戶對系統的詳細操作步驟,比如某人在某時間刪除了某個模塊的某條數據,經過一番斟酌,決定用struts2的攔截 器功能實現日志管理系統,因為系統是舊系統(SSH架構)了,用struts2就可以不用修改系統的原有的類或者方法,而且可以精確到用戶的具體操作,并 且所有的日志管理代碼直接寫在攔截器里即可。代碼如下: 


代碼只是當時寫的一個簡單測試例子,可以進行優化,將各個acton及對應的方法及操作等都可以進行配 置,如配置到一個xml文件當中,以后系統中新增加了action去修改xml文件就可以了。這樣就不用去寫大量的if,也不用每次有新增action來 改日志管理系統的代碼了。

    @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;  
       }   

        /** 
         * 插入系統日志 
         * @param logName 
         * @param logContent 
         */  
       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);  
       }  
    }  

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!