日期:2014-05-19  浏览次数:20696 次

关于struts2拦截器功能原理问题?
众所周知,struts2拦截器主要功能是实现对action请求的拦截,当从jsp页面发送数据到action时,先经过拦截器进行处理,我现在有个疑问是struts2是不是只能针对于action进行拦截,如果是某个地址页面呢?它还能实现拦截的功能吗?
  比如经常用到的权限验证问题,如果用户没有登录,那直接打开任何登录后的页面将会跳到登录首页,这是由拦截器来实现的,但是,大多数页面打开时并不能向action发送请求啊,那拦截器怎么去拦截?

------解决方案--------------------
我现在有个疑问是struts2是不是只能针对于action进行拦截,如果是某个地址页面呢?它还能实现拦截的功能吗?

这个是根据你自己配置核心控制器来的,如果参数是/* 那就表示拦截所有的请求,假如是某个地址的页面,也会拦截,去找有不有满足条件的action,没有的话 就按路径跳转。 
如果是*.action 那就只会拦截action 。

判断用户是否登录 ,这个可以自己定义一个拦截器嘛 ,


Java code

import com.chenghui.entity.User;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

/**
 * 验证用户是否登录
 * @author Administrator
 *
 */
public class CheckIsLoginInterceptor extends AbstractInterceptor{

    private static final long serialVersionUID = 5572804837134361839L;

    @Override
    public String intercept(ActionInvocation actionInvocation) throws Exception {
        User user = (User)actionInvocation.getInvocationContext().getSession().get("user");
        
        if(user==null){
            ActionContext.getContext().getSession().put("loginMessage", "请先登录!");
            return Action.LOGIN;
        }
        return actionInvocation.invoke();
    }

}