后台系统中应该需要一个功能那就是将每个请求的url地址和请求的参数log出来,方便系统调试和bug追踪,使用struts2时可以使用struts2的全局拦截器实现此功能:
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
|
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/** * 全局方法拦截器,用于log方法调用以及参数信息
*/
public class GloableLogInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 1L;
private Logger log = Logger.getLogger( this .getClass());
@Override
public String intercept(ActionInvocation invocation) throws Exception {
if (log.isDebugEnabled()) {
HttpServletRequest request = (HttpServletRequest) invocation
.getInvocationContext().get(
ServletActionContext.HTTP_REQUEST);
this .logParameters(request);
}
return invocation.invoke();
}
/**
*
* @param request
*/
private void logParameters(HttpServletRequest request) {
Map<string, string[]= "" > params = request.getParameterMap();
if ( null == params || params.size() == 0 ) {
return ;
}
Set<string> keys = params.keySet();
Iterator<string> keysIt = keys.iterator();
StringBuffer container = new StringBuffer();
container.append( "requestUrl[url:" )
.append(request.getRequestURL().toString()).append( "]" )
.append( ",paremeters:[" );
while (keysIt.hasNext()) {
String key = keysIt.next();
String[] values = params.get(key);
StringBuffer str = new StringBuffer();
str.append(key).append( "=" );
if (values.length > 1 ) {
str.append( "{" );
for (String value : values) {
str.append(value).append( "," );
}
this .removeLastCharacter(str);
str.append( "}" );
} else
str.append(values[ 0 ]);
str.append( "," );
container.append(str.toString());
}
this .removeLastCharacter(container);
container.append( "]" );
log.debug(container.toString());
}
private void removeLastCharacter(StringBuffer buff) {
int len = buff.length();
buff.replace(len - 1 , len, StringUtils.EMPTY);
}
} </string></string></string,> |
这时我们还需要自定义拦截器链,这样就不需要在每个package中声明使用此拦截器,只要将需要的package继承我们带有日志拦截功能的拦截器即可!
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
|
<interceptors> <!--全局日志拦截器-->
<interceptor name= "gloableLogInterceptor" class = "gloableLogInterceptor" ></interceptor>
<interceptor-stack name= "defaultStack" >
<interceptor-ref name= "exception" >
<interceptor-ref name= "alias" >
<interceptor-ref name= "servletConfig" >
<interceptor-ref name= "i18n" >
<interceptor-ref name= "prepare" >
<interceptor-ref name= "chain" >
<interceptor-ref name= "scopedModelDriven" >
<interceptor-ref name= "modelDriven" >
<interceptor-ref name= "fileUpload" >
<interceptor-ref name= "checkbox" >
<interceptor-ref name= "multiselect" >
<interceptor-ref name= "staticParams" >
<interceptor-ref name= "actionMappingParams" >
<interceptor-ref name= "params" >
<param name= "excludeParams" >^action:.*,^method:.*
</interceptor-ref>
<!-- 在注入参数后进行拦截 -->
<interceptor-ref name= "gloableLogInterceptor" ></interceptor-ref>
<interceptor-ref name= "tokenInterceptor" ></interceptor-ref>
<interceptor-ref name= "conversionError" >
<interceptor-ref name= "validation" >
<param name= "excludeMethods" >input,back,cancel,browse
</interceptor-ref>
<interceptor-ref name= "workflow" >
<param name= "excludeMethods" >input,back,cancel,browse
</interceptor-ref>
<interceptor-ref name= "debugging" >
<interceptor-ref name= "deprecation" >
</interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-ref></interceptor-stack>
</interceptors> < default -interceptor-ref name= "defaultStack" ></ default -interceptor-ref>
|
相关推荐
Struts2拦截器(Interceptor) Struts2拦截器(Interceptor)
该例子为struts2注解与拦截器demo,利用myEclipse8.5开发,导入刚才后,自动加载所需struts2的jar包,可以直接运行,是初学struts2注解、拦截器很好的例子,保证10分钟学会2种技术,愿意分享给大家。
解决Struts2中的中文乱码。该代码是用作Struts2的拦截器中
struts2 拦截器 解决 请求乱码 和 输出乱码 java
struts2常用拦截器,struts2经常用到的拦截器,熟悉熟悉
使用Struts2实现用户权限拦截、重点是掌握拦截器的使用和配置方法,通过案例的学习,就能掌握struts中拦截器的使用方法,让我们能快速上手
关于struts2 拦截器的详细的解释及其在开发中对struts2的拦截器的应用和拦截器在框架中的作用.
struts2,Interceptor struts2拦截器实例,两套实例,一套是针对单个的action配置的,另一套实例是针对全局的action配置的拦截器interceptor
Struts2拦截器.ppt Struts2拦截器.ppt Struts2拦截器.ppt
struts2 Interceptor拦截器 http://whitewolf.0fees.net
Struts2拦截器源程序 Struts2拦截器源程序 Struts2拦截器源程序 Struts2拦截器源程序 Struts2拦截器源程序
struts2拦截器的使用说明文档,配置说明文档。可以看一下
详细说明了struts2中拦截器的使用。并且通过一个小例子讲解了拦截器的具体使用
基于struts2的拦截器测试,实现了页面的跳转,中间过程的拦截
Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现.
struts2拦截器应用小例子,与大家共分享
Struts2的核心,拦截器的应用!!!
Struts2拦截器实现权限控制demo,我感觉对初学者还是有一定帮助的
struts2 用拦截器 实现用户权限登录 可以直接运行,只单单用到struts的东西。
其中,init和destroy方法会在程序开始和结束时各执行一遍,不管使用了该拦截器与否,只要在struts.xml中声明了该Struts2拦截器就会被执行。 intercept方法就是拦截的主体了,每次拦截器生效时都会执行其中的逻辑。