实现
实现Interceptor接口
1 2 3 4 5 6 7 8
| public interface Interceptor extends Serializable { void init(); void destroy(); String intercept(ActionInvocation invocation) throws Exception; }
|
继承AbstractInterceptor抽象类
AbstractInterceptor
类实现了Interceptor
接口
1 2 3 4 5
| public class AbstractInterceptor implements Interceptor{ void init(){} void destroy(){} String intercept(ActionInvocation invocation) throws Exception; }
|
配置
在struts.xml
中注册拦截器
1 2 3 4 5 6 7 8 9 10
| <struts> <package name="default" extends="struts-default"> <interceptors> <interceptor name="myInterceptor" class="包名.MyInterceptor" /> </interceptors> <action name="myAction" class="包名.MyAction"> <interceptor-ref name="myInterceptor" /> </action> </package> </struts>
|
内置拦截器
在struts-default.xml
中
拦截器 |
作用 |
params拦截器 |
负责将请求参数设置为Action属性 |
staticParams拦截器 |
将配置文件中action元素的子元素param参数设置为Action属性 |
servletConfig拦截器 |
将源于ServletAPI的各种对象注入到Action,必须实现对应接口 |
fileUpload拦截器 |
对文件上传提供支持,将文件和元数据设置到对应的Action属性 |
exception拦截器 |
捕获异常,并且将异常映射到用户自定义的错误界面 |
validation拦截器 |
调用验证框架进行数据验证 |
简单功能
计算Action执行时间
1 2 3 4 5 6 7 8 9
| public class TimerInterceptor extends AbstractInterceptor{ public String intercept(ActionInvocation invocation) throws Exception{ long start = System.currentTimeMillis(); String result = invocation.invoke(); long end = System.currentTimeMillis(); System.out.println("时间:"+(end-start)/1000+"s"); return result; } }
|
权限校验
1 2 3 4 5 6 7 8 9 10 11
| public class AuthInterceptor extends AbstractInterceptor{ public String intercept(ActionInvocation invocation) throws Exception{ ActionContext context = ActionContext.getContext(); Map<String, Object> session = context.getSession(); if(session.get("loginInfo")!=null) { return invocation.invoke(); } else { return "login"; } } }
|