zoukankan      html  css  js  c++  java
  • 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>发那个在全局视图之前噢

  • 相关阅读:
    python的垃圾回收机制
    生成器
    装饰器
    模块与包
    MES实施会有哪些情况?为你介绍两种常见的类型
    中国智慧工厂未来发展及趋势几何?这里给你讲个清楚
    未来智能工厂是什么样?这五种产业必不可少
    制造企业非常头疼的插单问题,本文给你这些实用建议,第7点最具价值
    MES选型很困惑?避开这三个禁忌!
    如何适应应用场景?高级排程系统的功能如此强大!
  • 原文地址:https://www.cnblogs.com/wuhuisheng/p/2099618.html
Copyright © 2011-2022 走看看