1):重写拦截器的方式
重写拦截比较简单首先确定重写的拦截器:
例如:DefaultWorkflowInterceptor拦截器
I:找到DefaultWorkflowInterceptor的源代码 复制源代码
II:在自己创建的工程里加入DefaultWorkflowInterceptor的整个包的路径
com.opensymphony.xwork2.interceptor
创建一个类DefaultWorkflowInterceptor张贴复制DefaultWorkflowInterceptor的源代码
这样就可以重写源码代码 根据自己的需求
当程序查找引用包的时候首先在classpath搜索 ,所以在工程里的重写的拦截器优先
每个拦截器都是实现了
init: 该方法将在拦截器被创建后立即被调用, 它在拦截器的生命周期内只被调用一次. 可以在该方法中对相关资源进行必要的初始化
interecept: 每拦截一个请求, 该方法就会被调用一次.
destroy: 该方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次.
interecept: 每拦截一个请求, 该方法就会被调用一次.
destroy: 该方法将在拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次.
Struts 会依次调用为某个 Action 而注册的每一个拦截器的 interecept 方法.
每次调用 interecept 方法时, Struts 会传递一个 ActionInvocation 接口的实例.
ActionInvocation: 代表一个给定 Action 的执行状态, 拦截器可以从该类的对象里获得与该 Action 相关联的 Action 对象和 Result 对象. 在完成拦截器自己的任务之后, 拦截器将调用 ActionInvocation 对象的 invoke 方法前进到 Action 处理流程的下一个环节.
AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy 提供了一个空白的实现
每次调用 interecept 方法时, Struts 会传递一个 ActionInvocation 接口的实例.
ActionInvocation: 代表一个给定 Action 的执行状态, 拦截器可以从该类的对象里获得与该 Action 相关联的 Action 对象和 Result 对象. 在完成拦截器自己的任务之后, 拦截器将调用 ActionInvocation 对象的 invoke 方法前进到 Action 处理流程的下一个环节.
AbstractInterceptor 类实现了 Interceptor 接口. 并为 init, destroy 提供了一个空白的实现
举例
I:首先创建一个类名字:LoginInterceptor 且继承AbstractInterceptor类
II:重写intercept方法
@Override
public
String intercept(ActionInvocation invocation)
throws
Exception {
//在这里就可以写 你要做的逻辑判断
return
invocation.invoke();
}
III:在配置文件中进行配置加载 自定义拦截器
<
interceptors
>
<
interceptor
name
=
"loginInterceptor"
class
=
"survey.interceptors.LoginInterceptor"
>
</
interceptor
>
<
interceptor-stack
name
=
"crudStack"
>
//放在这个位置会首先执行,放在
paramsPrepareParamsStack拦截器栈后面则会等
paramsPrepareParamsStack栈的拦截器都执行完了在执行这个
loginInterceptor
位置影响着执行顺序
<
interceptor-ref
name
=
"loginInterceptor"
></
interceptor-ref
>
<
interceptor-ref
name
=
"paramsPrepareParamsStack"
>
</
interceptor-ref
>
</
interceptor-stack
>
</
interceptors
>
//设置为默认默认引用的拦截器栈
<
default-interceptor-ref
name
=
"crudStack"
></
default-interceptor-ref
>