最近一个项目客户要求能够监控用户对系统的详细操作步骤,比如某人在某时间删除了某个模块的某条数据,经过一番斟酌,决定用struts2的拦截器功能实现日志管理系统,因为系统是旧系统(SSH架构)了,用struts2就可以不用修改系统的原有的类或者方法,而且可以精确到用户的具体操作,并且所有的日志管理代码直接写在拦截器里即可。代码如下:
代码只是当时写的一个简单测试例子,可以进行优化,将各个acton及对应的方法及操作等都可以进行配置,如配置到一个xml文件当中,以后系统中新增加了action去修改xml文件就可以了。这样就不用去写大量的if,也不用每次有新增action来改日志管理系统的代码了。
-
@SuppressWarnings("serial")
-
publicclassLogInterceptorextendsAbstractInterceptor{
-
privateStringlogName;
-
privateStringlogContent;
-
protectedLoggerlog=Logger.getLogger(getClass());
-
-
publicvoidinit(){
-
}
-
-
@Override
-
publicStringintercept(ActionInvocationai)throwsException{
-
Mapsession=ai.getInvocationContext().getSession();
-
Objectaction=ai.getAction();
-
Stringmethod=ai.getProxy().getMethod();
-
try{
-
if(StringUtils.isBlank(method))method="method";
-
SysUsersysUser=(SysUser)session.get(Constants.SESSION_USER_KEY);
-
StringuserName="";
-
if(sysUser!=null)userName=sysUser.getUserName();
-
StringcurrentTime=TimeHelper.getCurrentTime();
-
StringlogContentHead="用户"+userName+currentTime;
-
ai.invoke();
-
-
if(actioninstanceofSysOrgAction){
-
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(actioninstanceofSysOrgForAdmAction){
-
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(actioninstanceofSysUserAction||actioninstanceofSysUserForAdmAction){
-
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(Exceptione){
-
e.printStackTrace();
-
}
-
returnAction.SUCCESS;
-
}
-
-
-
-
-
-
-
privatevoidaddSysLog(StringlogName,StringlogContent){
-
HttpServletRequestrequest=ServletActionContext.getRequest();
-
SysLogServicesysLogService=(SysLogService)ApplicationContextFactory.getApplicationContext().getBean("sysLogService");
-
SysLogsysLog=newSysLog();
-
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);
-
}
-
}
分享到:
相关推荐
2、拦截器实现用户权限检查功能 3、拦截器自动生成日志 4、未登录非法访问页面检测 5、三种方式日志的生成 6、页面访问计数 7、选中页面对应的帮助页面实现 8、根据页面编号或名称跳转页面 9、数据库连接池 ...
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控制标签详解 ...
第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系统...
2、后台:Struts2、动态代理、Mybatis框架、log4J日志框架、jstl 、jstl自定义分页标签、代码机器人、Dwr、POI(实现Excel文件的导入导出)等 3、数据库:Mysql 4、服务器:Tomcat 项目中涉及的功能: 1、项目以及...
4.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能 5.容器提供了众多的辅助类,能加快应用的开发 6.spring对于主流的应用框架提供了集成支持,如hibernate,JPA,Struts等 7.spring属于低侵入...
工程的前身是我的毕业设计,新航线图书销售管理系统,经过几轮的升级,已经是一个庞大的工程了。为了提供代码的可维护性性,对源码进行了工程拆分。 src目录下: 工程分为以下 01 common 基础源码工程,提供了基础类...
2)、前端控制器使用Struts2。 3)、IOC容器使用Spring。 4)、ORM使用JPA,默认实现是Hibernate。 5)、内置搜索(OSEM)使用Compass。 6)、认证授权使用SpringSecurity。 7)、代码生成使用Freemarker。 8)、日志...
9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过StatelessSession来进行批量操作 9.4.3 通过HQL来进行批量操作 ...
9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过StatelessSession来进行批量操作 9.4.3 通过HQL来进行批量操作 ...
9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过StatelessSession来进行批量操作 9.4.3 通过HQL来进行批量操作 ...
9.2 利用拦截器(Interceptor)生成审计日志 9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过StatelessSession来进行批量操作 9.4.3 通过HQL来进行批量操作 ...
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 外部化区分区域的...
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 外部化区分区域的...