拦截器:就是在访问action之前,对其进行拦截!可以在拦截器中做一些逻辑的处理!比如权限验证,没有权限就不给予访问!
拦截器等效于servlet中的过滤器!
使用拦截器步骤:
1.定义自己的拦截器:
import
com.opensymphony.xwork2.ActionInvocation;
import
com.opensymphony.xwork2.interceptor.Interceptor;
/**
* 定义自己的拦截器,需要实现Intercept接口!
*
*/
public
class MyInterceptor implements Interceptor{
public
void destroy() {
}
public
void init() {
}
/**
* 重写intercept方法,在该方法中实现自己的拦截逻辑!
* 调用invocation.invoke()方法放行action!
*/
public
String intercept(ActionInvocation invocation) throws Exception {
System.
out.println("图片上传" );
return invocation.invoke();
// return null;//不执行action
}
}
|
2.在struts-interceptor.xml的配置文件中声明:
需要在struts.xml中包含上述配置文件!
struts-interceptor.xml:
<?
xml
version= "1.0" encoding ="UTF-8" ?>
<!
DOCTYPE
struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<
struts
>
<
package
name="interceptor" namespace="/" extends="struts-default" >
<!-- 声明拦截器,拦截器声明应该位于action之前-->
<interceptors>
<!--声明自己定义的拦截器 -->
<interceptor name= "imageInterceptor"
class= "cn.itheima03.struts2.interceptor.MyInterceptor" ></interceptor>
<!-- 声明拦截器栈 -->
<interceptor-stack name= "myInterceptor">
<interceptor-ref name="imageInterceptor" ></interceptor-ref>
<interceptor-ref name="defaultStack" ></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 修改默认的拦截器栈 -->
<default-interceptor-ref name="myInterceptor" ></default-interceptor-ref>
<!--声明action,在执行action之前,会先执行拦截器中的方法 -->
<action name= "interceptorAction_*" method ="{1}"
class= "cn.itheima03.struts2.interceptor.InterceptorTestAction" >
<result>
index.jsp
</result>
</action>
</
package
>
</
struts
>
|
3.定义action:
import
com.opensymphony.xwork2.ActionSupport;
public
class InterceptorTestAction extends ActionSupport{
public
String interceptor(){
System.
out.println("interceptor" );
return SUCCESS ;
}
}
|