SSH入门系列3:struts2拦截器
SSH入门系列3:struts2拦截器
ORZ你好 发表于7个月前
SSH入门系列3:struts2拦截器
  • 发表于 7个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

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>

 

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 13
码字总数 9911
×
ORZ你好
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: