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

 

 
一个项目客户要求能够监控用户对系统的详细操作步骤,比如某人在某时间删除了某个模块的某条数据,经过一番斟酌,决定用struts2的拦截 器功能实现日志管理系统,因为系统是旧系统(SSH架构)了,用struts2就可以不用修改系统的原有的类或者方法,而且可以精确到用户的具体操作,并 且所有的日志管理代码直接写在拦截器里即可。代码如下: 

 

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

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
@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); 
   
}

你可能感兴趣的:(struts2拦截器)