- 浏览: 197768 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (121)
- java_基础 (26)
- java_web (15)
- javascript (9)
- extJS (0)
- dwr (0)
- guobin_ETL (1)
- guobin_ssh (17)
- guobin_webservice (1)
- guobin_jbpm (0)
- guobin_jquery (0)
- guobin_acegi (1)
- guobin_poi/jxl (2)
- guobin_multiThread (0)
- guobin_名称解释 (0)
- guobin_FLEX (0)
- guobin_php (0)
- guobin_ORACLE (1)
- guobin_mysql (0)
- guobin_linux (0)
- guobin_powerDesigner (0)
- guobin_visol (0)
- guobin_ER/STUDIO (0)
- guobin_jmesa (0)
- guobin_weblogic (0)
- guobin_kettle (0)
- guobin_一路风雨 (5)
- guobin_spark (0)
- java_xml (7)
- guobin_规则引擎 (0)
- 插件开发 (2)
- 软件管理 (3)
- spring mvc (2)
- java_jni (1)
- eclipse (1)
- oracle (0)
- 项目学习笔记 (1)
- java多线程学习记录 (9)
- websphere性能设置和日常维护 (2)
- (1)
- 系统软件架构设计 (1)
- ces (1)
- 需求分析 (2)
- IBM-CICS GATEWAY (1)
- 工具使用 (1)
- 网络信息安全编程 (1)
最新评论
-
yzh__:
学习一个
Hibernate 自关联注解方式 -
xiaoyahuang:
"2)将Sysdeo Plugin下的DevLoad ...
eclipse项目引用 -
guobin6125:
guobin6125 写道sfasshahhah评论的评论
欢迎使用Kit! -
guobin6125:
sfass
欢迎使用Kit! -
guobin6125:
tst23
欢迎使用Kit!
最近一个项目客户要求能够监控用户对系统的详细操作步骤,比如某人在某时间删除了某个模块的某条数据,经过一番斟酌,决定用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;
}
/**
* 插入系统日志
* @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);
}
}
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);
}
}
发表评论
-
解决jquery load 缓存数据 .
2012-08-19 16:03 1963当jquery load 一个页面时候 只加载一次 解决方 ... -
spring管理统一异常spring AOP的异常拦截 .
2012-08-18 17:57 9077系统的异常处理机制是衡量一个系统设计的关键因素,良好的异常处理 ... -
Socket 短连接、长连接
2012-08-14 15:11 1300socketSocket协议的形象描述socket的 英文原 ... -
easy ui 验证框02
2012-07-01 10:29 997easyui的验证分为纯客户端验证和ajax验证。 1. ... -
easy ui 验证框 01
2012-07-01 10:28 2772使用过程中的一积累,备查。 EasyUI 验证框使用方法 ... -
16款 web开发的工具
2012-05-24 13:33 872http://www.iteye.com/news/25137 ... -
欢迎使用Kit!
2012-05-08 10:26 1037http://xueduany.github.com/KitJ ... -
c3p0详细配置
2011-06-30 10:36 806c3p0详细配置 官方文档 : http://www.mch ... -
spring c3p0
2011-06-30 10:12 1279C3P0在spring中的配置 2007-01-30 11:2 ... -
spring 事务管理配置
2011-05-26 14:07 9902011-03-24 Spring3.0中的事务控制的配置方法 ... -
oracle存储过程
2011-03-17 15:37 834Oracle 存储过程 关键字: storedprocedur ... -
sql优化
2010-03-04 11:18 17871:前言 数据库 ... -
下拉框中 可编辑
2009-09-21 13:19 982<div style="position: r ... -
去除重复登录情况 --登录不重复
2009-08-17 17:25 1309以前做财务项目时遇到了一个问题,以前我都没有考虑过,这次 ...
相关推荐
本文将详细介绍如何利用Struts拦截器和注解来实现日志审计功能。 首先,我们需要了解Struts拦截器的工作原理。拦截器是基于Java的动态代理模式实现的,它们在Action调用前后执行,形成一个拦截器链。每个拦截器都...
通过以上步骤,我们可以实现一个基本的基于Struts2拦截器的权限控制系统。这个demo对于初学者来说,是一个很好的起点,可以帮助他们理解如何在实际项目中结合Struts2的拦截器和权限控制来增强应用的安全性。在实际...
在Struts2框架中,拦截器主要用于对Action执行前后的过程进行干预,以便执行一些通用的功能,如验证用户输入、记录日志、事务管理等。 - **拦截器的核心功能**:Struts2拦截器可以动态地拦截发送到指定Action的请求...
本教程将详细介绍如何使用Struts2的拦截器来实现用户权限登录功能。 ### 一、拦截器的原理与作用 1. **原理**:拦截器工作在Action调用之前,它通过观察者模式实现,当一个请求到达时,会按照配置的顺序依次执行...
2. **如何实现**:Struts2提供了一个灵活的Interceptor框架,开发者可以通过实现Interceptor接口来自定义拦截器,也可以通过继承已有的拦截器实现来进行扩展。 3. **配置方式**:Interceptor的配置通过Struts2的配置...
在本篇文章中,我们将深入探讨Struts2的日志拦截器,以及如何使用`LoginfoInterceptor.java`来实现自定义的日志拦截。 首先,让我们了解什么是拦截器。在Struts2中,拦截器是基于AOP(面向切面编程)的概念,它们是...
总之,Struts2的拦截器机制结合AOP思想,为Java Web开发带来了强大的功能,使得开发者可以轻松地实现诸如日志记录、安全控制、性能优化等横切关注点。通过对拦截器的灵活配置和自定义,我们可以构建出更加高效、健壮...
Struts拦截器是Java Web开发中的重要概念,尤其在基于Struts 2框架的应用中扮演着核心角色。这个"struts拦截器的例子"提供了一个学习和理解拦截器工作原理的起点,非常适合对这一主题感兴趣的初学者。 Struts 2框架...
Struts2提供了一系列内置的拦截器,如`params`拦截器用于处理请求参数,`exception`拦截器处理异常,`i18n`拦截器实现国际化,`chain`拦截器使请求继续执行下一个Action,`timer`记录Action的执行时间等。这些拦截...
在Struts2中,拦截器可以看作是AOP的一种实现形式。 - **目标对象**:即原始的Action对象,包含了实际处理业务逻辑的方法。 - **被插入的处理方法**:即拦截器中定义的方法,在目标对象的方法被调用前后自动执行。 ...
总的来说,"双鱼林struts2_hibernate人事工资管理系统"是一个集成了主流Java Web技术的实用工具,通过Struts2和Hibernate的结合,实现了高效的人事和工资管理,为企业提供了稳定、安全的后台支撑。开发者可以在此...
通过上述配置,开发者可以灵活地定义和管理拦截器,以实现如日志记录、权限验证、性能监控等多种功能,提高应用程序的可扩展性和维护性。在实际项目中,通常会结合Struts2的注解和配置文件来定义拦截器,以满足不同...
总的来说,"Struts2框架实现图书管理系统"是一个实践性的项目,涵盖了Struts2的基础应用和拦截器的使用,对于理解和掌握Struts2框架有着极大的帮助。通过这个项目,开发者不仅可以学习到如何构建一个完整的Web应用,...
Struts2的拦截器机制使得在Action执行前后可以插入额外的功能,如日志记录、权限验证等。 系统中的主要功能可能包括: 1. 学生信息添加:允许管理员录入新学生的信息,这些信息会被存储到数据库中。 2. 学生信息...
在Struts1中,拦截器(Interceptor)是一个重要的概念,它允许我们在业务逻辑执行前或执行后添加额外的操作,如日志记录、权限验证等。这篇博客可能详细解释了如何在Struts1中配置和使用拦截器插件。 首先,让我们...
- **拦截器(Interceptor)**:拦截器是Struts2中的重要组件,它可以实现通用功能,如日志、权限验证等,无需在每个Action中重复编写。 2. **JSP技术** - **视图层**:JSP(JavaServer Pages)是创建动态网页的...
在本文中,我们将深入探讨Struts拦截器的工作原理、如何实现自定义拦截器以及它们在实际应用中的作用。 1. **Struts拦截器的工作原理** Struts拦截器是基于AOP(面向切面编程)思想设计的,它们按照预定义的顺序...