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);
}
}
代码只是当时写的一个简单测试例子,可以进行优化,将各个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);
}
}
相关文章推荐
- Struts2拦截器实现日志管理系统
- Struts2拦截器实现日志管理系统
- Vue + Element UI 实现权限管理系统 前端篇(十二):用户管理模块
- 高级权限管理系统的设计---- 基于角色+模块的权限控制管理实现
- [置顶] ELK日志分析系统通过shield实现权限管理
- 通过struts2拦截器实现权限管理
- 模块管理常规功能自定义系统的设计与实现(31--第三阶段 权限设计[1])
- struts2中利用拦截器实现权限管理
- 权限管理系统(用户信息管理模块业务组件实现代码,带注解)
- OA 办公自动化系统:权限管理模块的实现原理思路
- 模块管理常规功能自定义系统的设计与实现(33--权限设计[3])
- 使用拦截器或者AOP实现权限管理(OA系统中实现权限控制)
- 基于SSH实现员工管理系统登录权限的过滤器与拦截器的综合使用
- 【Struts2进阶】Struts2拦截器实现基于Url的权限管理
- 模块管理常规功能自定义系统的设计与实现(05--权限和菜单)
- 商城项目用拦截器实现日志管理模块
- Struts2(十四)拦截器实现权限管理
- step by step 之餐饮管理系统四(日志模块实现)
- 模块管理常规功能自己定义系统的设计与实现(31--第三阶段 权限设计[1])
- 基于Struts2 的日志管理系统的Java实现