Struts2---->自定义interceptor
Struts2 自定义拦截器
一、拦截器定义,一般有两种方式
1、实现Interceptor接口
public interface Interceptor extends Serializable{
public void init();
public void destroy();
public String intercept(ActionInvocation invocation)();
}
2、继承AbstractInterceptor类,重写intercept()方法即可
此方法更可行,其实AbstractInterceptor类也就是实现了Interceptor接口
invocation.invoke();表示该方法执行完后执行Action的execute()方法或者执行下一个拦截器 invocation.getAction(); 可以将该法强制转换为Action的类类型
3、方法拦截器:继承MethodFilterInterceptor类,重写doIntercept()方法
MethodFilerInterceptor实现方法过滤中用到的两个参数
execludeMethods:该参数指定拦截器拒绝拦截的方法列表,多个方法用“,”隔开,指定了这个参数,拦截器不会拦截指定列表中的方法,就是所谓的黑名单
includeMethods:该参数指定拦截器需要拦截的方法列表,如果指定了参数,则指定的Action在执行前会被拦截,即白名单。
二、使用自定义拦截器
1、包内定义拦截器
<package....>
<interceptors>
<interceptor name="myinterceptor" class="....">
</interceptor>
</interceptors>
</package>
2、action内使用拦截器
<action .....>
<result.....></result>
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="myinterceptor"></interceptor-ref>
</action>
主要:可以看出使用了自定义拦截器的action要配置默认拦截器的引用,因为默认拦截器包含了参数的读取、session的管理等功能
三、例子代码
PermissionInterceptor.java
package com.interceptor;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
/**
* 限制没有登录的用户进入访问页面
*/
@SuppressWarnings("serial")
public class PermissionInterceptor implements Interceptor {
public void destroy() {
}
public void init() {
System.out.println("自定义interceptor执行");
}
public String intercept(ActionInvocation invocation) throws Exception {
Object user = ActionContext.getContext().getSession().get("user");
// 如果user不为null,代表用户已经登录,允许执行action中的方法
if (user != null){
System.out.println("用户已经登录");
return invocation.invoke();
}
System.out.println("用户没有登录");
ActionContext.getContext().put("message", "你没有权限执行该操作");
return "input";
}
}
TestAction.java
package com.action;
import com.opensymphony.xwork2.ActionSupport;
public class TestAction extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println("执行action");
return super.execute();
}
}
struts.xml
<struts> <constant name="struts.devMode" value="true"></constant> <package name="test" namespace="/" extends="struts-default"> <interceptors> <interceptor name="myinterceptor" class="com.interceptor.PermissionInterceptor"></interceptor> </interceptors> <action name="test" class="com.action.TestAction"> <result name="success">/success.jsp</result> <result name="input">/error.jsp</result> <interceptor-ref name="myinterceptor"></interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action> </package> </struts>
index.jsp 导航到login.jsp 和quit.jsp
<a href="login.jsp">login.jsp</a>
<a href="quit.jsp">quit.jsp</a>
login.jsp 向session添加user,访问action
<% request.getSession().setAttribute("user", "wsz");%>
该页面往session中添加user <a href="test.action">user.action</a>
quit.jsp 从session移除user,访问action
<%
request.getSession().removeAttribute("user");
%>
该页面从sessiong中移除user
<a href="test.action">user.action</a>
success.jsp
user.action访问成功
error.jsp
user.action访问成功

浙公网安备 33010602011771号