加载中…
个人资料
木鱼石
木鱼石
  • 博客等级:
  • 博客积分:0
  • 博客访问:21,007
  • 关注人气:2
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

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

(2009-05-02 19:30:16)
标签:

struts2

拦截器

分类: 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);
  

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有