悟生慧

 

struts2自定义拦截器

自定义拦截器
很实用
要自定义
如果用户登录后可以访问Action中的所有方法
    user.jsp{
      //设置用户为登录状态,session
    }
如果用户没有登录不允许访问action中的方法,并且提示"没有权限执行该操作"


package cn.itcast.action;


pulic class HelloWorldAction
{
    private String message;

   


    public String addUI(){
        this.message="addUI";
        return "success";
    }

    public String execute() throws Excention{
        this.message="execute"
        return "success";
    }
}


struts.xml文件如下

<package name="employee" namespace="/control/employee" extends="struts-default">
=====定义全局视图
<global-result>
<result name="success">/WEB-INF/page/message.jsp</result>
</global-result>
<action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
   <result name="success">/WEB-INF/page/message.jsp</result>
</action>
</package>


定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口
public class PermissionInterceptor Implements Interceptor{
      private static final long serialVersionUID=-5178310397732210602L;
}


拦截器 类


package cn.itcast.interceptor;

import com.opensymphony.xwork2.ActionInvocation;

public class PermissionInterceptor implements Interceptor{
       public void destroy(){
       }
       public void init(){
       }

       public String intercept(ActionInvocation invocation) throw Exception {
          Object user=ActionContext.getContext().getSession().get("user");//取得Session
          if(user != null) invocation.invoke();//如果user不为null,代表用户自己已经登录,允许执行action中的方法
          ActionContext.getContext().put("message","你没有权限执行该操作");
          return null;
       }
}

拦截器定义好需要注册
在struts.xml文件中进行注册

<package name="employee" namespace="/control/employee" extends="struts-default">
======拦截器
 <interceptors>
    <interceptor name="permission" [自定义] class="cn.itcast.interceptor.PermissionInterceptor "></interceptor>
 ==========定义拦截器栈<interceptor-stack name="permissionStack">
                               <interceptor-ref name="defaultStack"/> ====系统拦截器栈
                                <interceptor-ref name="permission"/>自定义拦截器
                       </interceptor-stack>
 </interceptors>
======
<global-result>
<result name="success">/WEB-INF/page/message.jsp</result>
</global-result>
<action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}">
  ----注释掉 <result name="success">/WEB-INF/page/message.jsp</result>
  ====使用这个拦截器<interceptor-ref name="permission"/>
</action>
</package>

注意:如果某个Action使用了自定义拦截器后那么Struts2的核心拦截器将会丢掉
既保留Struts2的核心拦截器有使用自定义拦截器   可以定义拦截器栈


包里的所有Action都使用自定义的拦截器如何定义呢?
<default-interceptor-ref name="permissionStack"></default-interceptor-ref>发那个在全局视图之前噢

posted on 2011-07-06 22:53  悟生慧  阅读(615)  评论(0编辑  收藏  举报

导航