首页 > 代码库 > Struts2自定义拦截器
Struts2自定义拦截器
作者:禅楼望月
尽管Struts2已经内置了很多的拦截器,但是有时这些拦截器可能不能满足我们的需求,这时我们就必须自定义我们自己的拦截器。
如果我们要创建自己的拦截器,则必须实现com.opensymphony.xwork2.interceptor.Interceptor接口。
import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;public class MyInterceptor implements Interceptor { @Override public void destroy() { // 在拦截器实例销毁之前被调用,主要用于销毁在 init() 中打开的资源 } @Override public void init() { /* 拦截器实例化之后,拦截器执行拦截之前,系统将回调该方法。对于每个拦截器, 该方法只被执行一次,和Servlet的init方法一样。因此方法主要用于初始化性资源。*/ } @Override public String intercept(ActionInvocation invocation) throws Exception { /* 这里执行拦截动作,和Action的execute方法一样,该方法返回一个字符串,作为 * 逻辑视图。如果该方法直接返回了一个字符串,系统则直接跳到该字符串所对应的页面, * 而不会调用被拦截的Action,该方法的参数invocation包含了被拦截的Action * 的引用,可以通过调用该参数的invoke方法,将控制权转给下一个拦截器,或者转给Action的execute方法*/ return null; }}
如果我们的拦截器不需要打开资源则可以使用com.opensymphony.xwork2.interceptor.AbstractInterceptor类,该类为我们实现了init()和destroy()方法,我们只需要实现intercept方法即可。
如,实现这样一个拦截器:登陆的时候验证用户名如果为“毛爷爷”,则转到错误页面,否则为请求添加一个日期的属性:
import java.util.Date;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor;import com.stbc.web.Action.LoginAction;public class InterceptorHello extends AbstractInterceptor { private static final long serialVersionUID = -5407269431454126006L; private String name; public void setName(String name) { this.name = name; } @Override public String intercept(ActionInvocation invocation) throws Exception { HttpServletRequest request=ServletActionContext.getRequest(); if(request.getParameter("username").equals("毛爷爷")){ return "error"; }else { request.setAttribute("datetime", new Date()); LoginAction action=(LoginAction) invocation.getAction(); return action.execute(); } }}
实用的方法和使用内置拦截器的方法一样:
<package name="loginPackage" extends="struts-default" namespace="/login"> <interceptors> <interceptor name="interceptormaoyeye" class="test.InterceptorHello"> <param name="name">你好!</param> </interceptor> </interceptors> <action name="login" class="com.stbc.web.Action.LoginAction"> <result name="success">welcome.jsp</result> <result name="error">welcome.jsp</result> <interceptor-ref name="interceptormaoyeye"> <!-- 这里使用了反射的方法,实际上调用的是拦截器类的setName方法 --> <param name="name">覆盖了默认值</param> </interceptor-ref> </action></package>
欢迎转载,请注明出处.
Struts2自定义拦截器
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。