struts2 拦截器使用配置

来源:互联网 发布:apache io模型 编辑:程序博客网 时间:2024/06/05 03:56

创建拦截器class:

package com.oa.util.interceptor;  

import java.util.Map;

import org.apache.struts2.ServletActionContext;

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

/** 
 * @author 赜 
 * @version 创建时间:2010-9-19 下午02:34:20 
 * 类说明 :拦截器!!!!
 */
public class mwebInterceptor extends AbstractInterceptor {

 @Override
 public String intercept(ActionInvocation invocation) throws Exception {
  //取得请求的action名字
  String name = invocation.getInvocationContext().getName();
  //获取namespace的名字
  String namespace = invocation.getProxy().getNamespace();
  if((namespace != null)&&(namespace.trim().length()>0)){
      if("/".equals(namespace.trim())){
    
       }else{
        namespace +="/";
       }
  }
  String URL = namespace+invocation.getProxy().getActionName();
  URL += ".action";
  String loginname = ServletActionContext.getRequest().getSession().getAttribute("n            ame").toString();
    if(loginname!="赜"){
        return Action.ERROR;
    }else{ 
         return invocation.invoke();
    }
 }

}

配置struts.xml
 <package name="programa" namespace="/programa" extends="struts-default">
  <interceptors>
   <interceptor name="programainterceptor" class="com.oa.util.interceptor.mwebInterceptor" ></interceptor>
  </interceptors>

<action name="delete" class="programaAction" method="delete">
   <interceptor-ref name="programainterceptor"></interceptor-ref> 
   
   <result name="success" type="chain">
       <param name="namespace">/programa</param>
       <param name="actionName">list</param>
      </result>
      <result name="error">/mweb/error.jsp</result>
  </action>
  </package>

 给programa中的delete方法设置拦截器,除了超级管理员以外的任何人不得删除信息。

配置Struts.xml时需注意:在package中定义自定义拦截器时要使用拦截器堆栈。设置Struts2默认的拦截器

<interceptors>
   <interceptor name="newstypeinterceptor" class="com.oa.util.interceptor.mwebInterceptor" ></interceptor>
   
            <interceptor-stack name="myStack"> 
            <interceptor-ref name="newstypeinterceptor"></interceptor-ref>
   
            <interceptor-ref name="defaultStack"></interceptor-ref>  
          
            </interceptor-stack>  
         
  </interceptors>
  <default-interceptor-ref name="myStack"></default-interceptor-ref>

在每个需要用到拦截器的action中调用拦截器

<action name="deleteids" class="newstypeAction" method="deleteids">
    <result name="success" type="redirectAction">
       <param name="namespace">/newstype</param>
       <param name="actionName">list</param>
       <param name="parse">true</param>
       <param name="la">${la}</param>
      </result>
      <interceptor-ref name="defaultStack"></interceptor-ref>
      <interceptor-ref name="newstypeinterceptor"></interceptor-ref>
  </action>

拦截器的调用顺序 一定要把默认的放在前面!

原创粉丝点击