代码只是当时写的一个简单测试例子,可以进行优化,将各个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拦截器的权限控制系统。这个demo对于初学者来说,是一个很好的起点,可以帮助他们理解如何在实际项目中结合Struts2的拦截器和权限控制来增强应用的安全性。在实际...
本文将详细介绍如何利用Struts拦截器和注解来实现日志审计功能。 首先,我们需要了解Struts拦截器的工作原理。拦截器是基于Java的动态代理模式实现的,它们在Action调用前后执行,形成一个拦截器链。每个拦截器都...
在Struts2框架中,拦截器主要用于对Action执行前后的过程进行干预,以便执行一些通用的功能,如验证用户输入、记录日志、事务管理等。 - **拦截器的核心功能**:Struts2拦截器可以动态地拦截发送到指定Action的请求...
2. **作用**:拦截器可以用于日志记录、性能监控、事务管理、权限验证等多种场景。在用户权限登录的场景中,拦截器可以检查用户是否已经登录,如果没有登录,则阻止访问受保护的资源。 ### 二、创建拦截器 1. **...
2. **如何实现**:Struts2提供了一个灵活的Interceptor框架,开发者可以通过实现Interceptor接口来自定义拦截器,也可以通过继承已有的拦截器实现来进行扩展。 3. **配置方式**:Interceptor的配置通过Struts2的配置...
在本篇文章中,我们将深入探讨Struts2的日志拦截器,以及如何使用`LoginfoInterceptor.java`来实现自定义的日志拦截。 首先,让我们了解什么是拦截器。在Struts2中,拦截器是基于AOP(面向切面编程)的概念,它们是...
总之,Struts2的拦截器机制结合AOP思想,为Java Web开发带来了强大的功能,使得开发者可以轻松地实现诸如日志记录、安全控制、性能优化等横切关注点。通过对拦截器的灵活配置和自定义,我们可以构建出更加高效、健壮...
Struts2提供了一系列内置的拦截器,如`params`拦截器用于处理请求参数,`exception`拦截器处理异常,`i18n`拦截器实现国际化,`chain`拦截器使请求继续执行下一个Action,`timer`记录Action的执行时间等。这些拦截...
Struts拦截器是Java Web开发中的重要概念,尤其在基于Struts 2框架的应用中扮演着核心角色。这个"struts拦截器的例子"提供了一个学习和理解拦截器工作原理的起点,非常适合对这一主题感兴趣的初学者。 Struts 2框架...
在Struts2中,拦截器可以看作是AOP的一种实现形式。 - **目标对象**:即原始的Action对象,包含了实际处理业务逻辑的方法。 - **被插入的处理方法**:即拦截器中定义的方法,在目标对象的方法被调用前后自动执行。 ...
总的来说,"双鱼林struts2_hibernate人事工资管理系统"是一个集成了主流Java Web技术的实用工具,通过Struts2和Hibernate的结合,实现了高效的人事和工资管理,为企业提供了稳定、安全的后台支撑。开发者可以在此...
通过上述配置,开发者可以灵活地定义和管理拦截器,以实现如日志记录、权限验证、性能监控等多种功能,提高应用程序的可扩展性和维护性。在实际项目中,通常会结合Struts2的注解和配置文件来定义拦截器,以满足不同...
总的来说,"Struts2框架实现图书管理系统"是一个实践性的项目,涵盖了Struts2的基础应用和拦截器的使用,对于理解和掌握Struts2框架有着极大的帮助。通过这个项目,开发者不仅可以学习到如何构建一个完整的Web应用,...
在本文中,我们将深入探讨Struts拦截器的工作原理、如何实现自定义拦截器以及它们在实际应用中的作用。 1. **Struts拦截器的工作原理** Struts拦截器是基于AOP(面向切面编程)思想设计的,它们按照预定义的顺序...
**基于Struts2实现报道管理系统** Struts2是一款强大的MVC框架,用于构建Java Web应用程序。在报道管理系统中,Struts2起到了核心架构的作用,它提供了模型-视图-控制器的设计模式,使得开发者能够更有效地组织和...
总的来说,Struts2的拦截器机制使得开发者能够轻松地添加自定义行为,提高了代码的复用性和模块化,是实现复杂业务逻辑和增强应用程序功能的重要工具。通过理解并熟练使用拦截器,可以极大地提高Struts2应用的灵活性...
在Struts2中,拦截器是基于Java的动态代理模式实现的,它可以看作是一个插件,用来在Action调用前后执行一些额外的逻辑,如日志记录、事务管理、权限验证等。通过配置,可以灵活地组合和堆叠多个拦截器,形成一个...