下面给一张图片表示Struts2拦截器的处理流程。

【Struts2】自定义拦截器interceptors

通过这个流程图,我们可以看出一个完整的请求大概的过程为:

 请求 -->filter 控制器 --> 拦截器 1/ 拦截器 2-->Action-->Result--> 拦截器 2/ 拦截器 1--> 响应输出 

可以清楚地看出,当请求到服务器的时候首先会经过拦截器,然后当响应到用户界面的时候又会经过拦截器。

下面我们来实现一个自定义的拦截器

1.  编写拦截器实现类

实现 Interceptor 接口(或者继承 AbstractInterceptor )

如:

MyInterceptor.java 文

package cn.test.interceptor;

import java.util.Map;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class MyInterceptor extends AbstractInterceptor{

    //如果下面逻辑执行了invoke方法,返回值无效;如果没有执行invoke方法返回String作为result标识符
    public String intercept(ActionInvocation ai) throws Exception {
        System.out.println("在Action之前调用");
        //登录检查
        Map<String,Object> session = 
            ActionContext.getContext().getSession();
        String username = (String)session.get("user");
        if(username!=null){//登录的用户
            ai.invoke();//调用后续拦截器或Action+Result
            System.out.println("在Result之后调用");
            return null;
        }else{//未登录
            return "login";//找<result name="login">
        }

    }

}
MyInterceptor.java

相关文章: