SSH入门系列3:struts2拦截器

Struts2的拦截器类是用来拦截用户请求,处理之后,然后在给Action处理。在Struts2上配置一个自定义拦截器方法如下:

1:用户自定义拦截器,自定义拦截器必须实现com.opensymphony.xwork2.interceptor接口,或者继承AbstractInterceptor 类,假设我对一个login.jsp进行拦截(拦截里面的username,password)。具体代码如下:

public class UserInterceptor   extends AbstractInterceptor {

    @Override
    public String intercept(ActionInvocation arg0) throws Exception {
    
        // TODO Auto-generated method stub
        System.out.println("开始调用拦截器");
    ActionContext ac =argo.getInvocationContext();

    Map<String,Object>  session = ac.getSession();
       
        if ( session.get("username")==null) {
          return "login";
        }else{
                    
        return     arg0.invoke();    
    
        }
        
    }

}

 注意:这里的arg0.invoke是在action之前实现的代码 ,如果你需要拦截器在action之后实现功能,可以把arg0.invoke() 提前。

2:在Struts.xml进行自定义拦截器 ,具体代码如下:

<interceptors>
    <interceptor name="UserInterceptor"  class="com.interceptor.UserInterceptor" ></interceptor>
   </interceptors>

3:struts.xml里面的action种使用拦截器。

<action name="*_*"  class="com.action.{1}Action" method="{2}" >
        <result name="login"  type="redirect" >/Page_index.jsp</result>
        <result name="list"  type="redirect">/list.jsp</result>
      
       <interceptor-ref  name="defaultStack"  ></interceptor-ref>
        <interceptor-ref  name="UserInterceptor"  ></interceptor-ref>
    
        </action>

注意:这里的默认拦截器必须填写,否则得不到session里的值,session会是一个空值,如果加了默认配置还是空值的话,试着把拦截器配置注释掉,运行后在解除注释。

   如果需要配置多个拦截器的话,可以在interceptors内写多个interceptor 标记,也可以在interceptor标记中间添加参数,用来定义参数,参数标记是param ,比如:

<interceptors-stack  name="拦截器栈名1">
    <interceptor name="UserInterceptor"  class="com.interceptor.UserInterceptor" ></interceptor>
  <interceptor name="拦截器名1"  class="拦截器类1" >

<param   name="参数名1"> 参数值1</param>

<param  name="参数名2" >参数值2</param>

</interceptor>  

<interceptor name="拦截器名2"  class="拦截器类2" ></interceptor>

</interceptors-stack>

 

默认的情况下,拦截器会拦截action里面的所有方法,如果想拦截固定方法,或者过滤固定方法,可以如下设置:

1用户自定义拦截器

public class FilterHelloInterceptor extends MethodFilterInterceptor {

    @Override
    protected String doIntercept(ActionInvocation arg0) throws Exception {
        System.out.println("方法都是一样的,名字不同而已");
        return arg0.invoke();
    }

}

 

2struts.xml  设置拦截器:

<interceptors    >

<interceptor  name="UserInterceptor "  class="" ></interceptor>

</interceptors>

3action里面配置

<interceptor-ref  name="UserInterceptor"  >

 <param  name="excludeMethods">  execute,aa,bb</param>

excludeMethods表示排除过滤的方法,拦截的方法是execute ,如果有多个则用,隔开,比如aa,bb

</interceptor-ref>

<interceptor-ref   name="" >

  <param  name="includeMethods"   >execute,aa,bb  </param>

includeMethods表示要对方法进行拦截,拦截的方法是execute ,如果有多个则用,隔开,比如aa,bb

</interceptor>

 

 

转载于:https://my.oschina.net/u/3533686/blog/1377450

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值