zoukankan      html  css  js  c++  java
  • struts中拦截器的开发

    1.开发Interceptor类

      用户自定义的拦截器一般需要继承AbstractInterceptor类,重写intercept方法

    public class UserInterceptor extends AbstractInterceptor{
        @Override
        public String intercept(ActionInvocation actionInvocation) throws Exception {
            //拿到当前执行的方法名,如果当前方法名不是login,就进行验证
            //获取actioncontext对象
            ActionContext actionContext = actionInvocation.getInvocationContext();
            //获取action的代理对象
            ActionProxy proxy = actionInvocation.getProxy();
            String methodName = proxy.getMethod();
            if(!"login".equals(methodName))
            {
                //先获取当前登录的用户
                Object userInfo = actionContext.getSession().get("userInfo");
                if(userInfo == null)
                    return "input";
                else
                    return actionInvocation.invoke();
            }else{
                //说明当前用户正在登录
                return actionInvocation.invoke();
            }
        }
    }

    2.配置拦截器

      配置拦截器栈

            <interceptors>
                <interceptor name="userInterceptor" class="com.juaner.login.UserInterceptor"></interceptor>
                <interceptor-stack name="myStack">
                    <interceptor-ref name="defaultStack"/>
                    <interceptor-ref name="userInterceptor"/>
                </interceptor-stack>
            </interceptors>

      执行拦截器

    <default-interceptor-ref name="myStack"></default-interceptor-ref>

    3.拦截器的生命周期

    • 服务器启动时,执行所有拦截器的创建,调用拦截器的init()方法;
    • 用户访问时,首先创建Action实例;
    • 然后执行拦截器的intercept()方法,该方法只有一个参数:ActionInvocation的对象actionInvocation。在该方法中调用actionInvocation.invoke()方法执行下一个拦截器;(类似于过滤器中的filterChain.doFilter()方法);
    • invoke()方法链最后会执行Action的execute()方法;
    • 最后执行拦截器intercept()方法中invoke()后的语句;

      

  • 相关阅读:
    浏览器缓存
    HTML学习笔记(九) Web Socket
    [转]maven2中snapshot快照库和release发布库的区别和作用
    [转]maven2中snapshot快照库和release发布库的应用
    CentOS 7 mini 试用笔记
    Windows找出占用端口的进程
    ORA-24408: could not generate unique server group name
    Oracle中NVL、NVL2、NULLIF 三个函数的区别?
    【代码大全-读书笔记】第1章 欢迎进入软件构建的世界
    【代码大全-读书笔记】前言
  • 原文地址:https://www.cnblogs.com/juaner767/p/5552928.html
Copyright © 2011-2022 走看看