您的位置:首页 > 编程语言 > Java开发

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

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

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

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;

}

/**

* 插入系统日志

* @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);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: