Struts拦截器 interceptor与过滤器filter的不同

interceptor:对action进行拦截的,是Struts工具。 

filter:是对所有的东西进行过滤。.css  .js   .jpg

 

一、拦截器配置

第一步:创建一个类,继承自AbstractInterceptor

第二步:配置struts.xml
1.添加<interceptors>配置节,添加拦截器配置。

<interceptors>
        <!-- name是自定义用在ref的name,class是第一步创建的累的完全限定名 -->
        <interceptor name="loginlan" class="com.itnba.maya.util.LoginInterceptor"></interceptor>
        <interceptor name="mylan" class="com.itnba.maya.util.Interceptor"></interceptor>
                 <!-- stack是好多interceptor放在一起用 -->
                   <interceptor-stack name="newstack">
                       <interceptor-ref name="loginlan"></interceptor-ref>
                       <interceptor-ref name="mylan"></interceptor-ref>
                       <interceptor-ref name="defaultStack"></interceptor-ref>
                   </interceptor-stack>
</interceptors>

2.在action中引用,<interceptors>中的配置。

<action name="*_*" class="com.itnba.maya.controller.{1}Action" method="{2}">
            <!-- 在action中引用interceptor,符合这个格式通配符的页面就会执行引用的拦截器 -->
            <interceptor-ref name="newstack"></interceptor-ref>
            <result name="success">
               {1}/{2}.jsp
            </result>
        </action>


注意:
1.在action中需要添加defaultStack引用
2.在建<interceptors>可以建立stack,把defaultStack也添加在里面,在引用的时候引用此stack即可,如:第一步中的stack中的

<interceptor-ref name="defaultStack"></interceptor-ref>。

二、在拦截器中使用内置对象。
1.ActionContext 获取Map:session = ActionContext.getContext().getSession();

public class LoginInterceptor extends AbstractInterceptor{
    private Map<String,Object> session;
    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
        session = ActionContext.getContext().getSession();
        if(session.get("user") == null){
            return "nologin";
        }
         
        return arg0.invoke();
    }
}

2.ServletActionContext 获取HttpSession
3.实现SessionAware接口:implements SessionAware

public class LoginAction extends ActionSupport implements ModelDriven<User>,SessionAware {
    private Map<String,Object> session = new HashMap<String,Object>();
    private User user = new User();
    
    public String login(){
        
        return SUCCESS;
    }
    public String yanzheng(){
        List<String> list = new ArrayList<String>(); 
        list.add("admin");
        list.add("lihaha");
        Object obj = session.get("user");
        if(obj == null){
            if(list.contains(user.getUsername())){
                session.put("user", user.getUsername());
                return SUCCESS;
            }
            else{
                return "nologin";
            }
        }
        else{
            return SUCCESS;
        }
        
        
    }
    @Override
    public User getModel() {
        // TODO 自动生成的方法存根
        return user;
    }
    @Override
    public void setSession(Map<String, Object> arg0) {
        this.session= arg0;
        
    }