您的位置:首页 > 编程语言 > Java开发

struts中拦截器的开发

2016-06-02 14:28 501 查看

1.开发Interceptor类

  用户自定义的拦截器一般需要继承AbstractInterceptor类,重写intercept方法

public class UserInterceptor extends AbstractInterceptor{
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
//拿到当前执行的方法名,如果当前方法名不是login,就进行验证
//获取actioncontext对象
ActionContext actionContext = actionInvocation.getInvocationContext();
//获取action的代理对象
ActionProxy proxy = actionInvocation.getProxy();
String methodName = proxy.getMethod();
if(!"login".equals(methodName))
{
//先获取当前登录的用户
Object userInfo = actionContext.getSession().get("userInfo");
if(userInfo == null)
return "input";
else
return actionInvocation.invoke();
}else{
//说明当前用户正在登录
return actionInvocation.invoke();
}
}
}


2.配置拦截器

  配置拦截器栈

<interceptors>
<interceptor name="userInterceptor" class="com.juaner.login.UserInterceptor"></interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="userInterceptor"/>
</interceptor-stack>
</interceptors>


  执行拦截器

<default-interceptor-ref name="myStack"></default-interceptor-ref>


3.拦截器的生命周期

服务器启动时,执行所有拦截器的创建,调用拦截器的init()方法;

用户访问时,首先创建Action实例;

然后执行拦截器的intercept()方法,该方法只有一个参数:ActionInvocation的对象actionInvocation。在该方法中调用actionInvocation.invoke()方法执行下一个拦截器;(类似于过滤器中的filterChain.doFilter()方法);

invoke()方法链最后会执行Action的execute()方法;

最后执行拦截器intercept()方法中invoke()后的语句;

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: