zoukankan      html  css  js  c++  java
  • Strust2中,加入监听器来判断用户是否在session中存在。

    Strust2中,加入监听器来判断用户是否在session中存在。

    struts2拦截器流程: 

    web.xml中,struts2设置拦截*.action ,当用户访问某一个action中,会行执行它的默认拦截器再执行action中的方法。

    拦截器实现原理:

    大部分时候,拦截器方法都是通过代理的方式来调用的。Struts2的拦截器实现相对简单。当请求达到struts2的 servletDispatcher时,Struts2会查找配置文件,并根据其配置实例相对的拦截器对象,然后串成一个列表(list),最后一个一个调用列表中的拦截器。

    第一步:

    先写一个拦截器的类:UserFilter.Java,继承 AbstractInterceptor,只要实现intercept方法。

    首先来说,拦截器不能拦截登陆的action。所以要对LoginAction过滤


    Object action = actionInvoction.getAction(); //获得拦截器对象
    //如果获得的拦截器为Login或者LoginAction,则不进行拦截
    if(action instanceof Login || action instanceof LoginAction){
     return actionInvocation.invoke();
    }


    //确认session中用户是否存在
    Map session = actionInvoction.getInvocationContext().getSession();
    String login = (String) session.get("admin");


    //如果用户不为空,则退出拦截。否则跳入LOGIN 
    if(login != null && login.length() > 0){
     return actionInvocation.invoke();
    } else {
     return Action.LOGIN;
    }

    第二步:在struts.xml中写入相应的配置信息

    在<package  下面写入拦截器配置

    <interceptors>
     <interceptor name = "loginFilter" class = "com.woheni.filter.UserFilter"/>   拦截器名、拦截器实现类
     一下为定义拦截器栈
     <intercepter-stack name="teamwareStack">   拦截器栈名
      <interceptor-ref name="loginFilter"/>  拦截器一  (和拦截器名相同)
      <interceptor-ref name="defaultStack"/>  拦截器二  这里再引用系统的默认拦截器工作
     </interceptor-stack>
    </interceptors>

    <!--定义默认拦截器-->
    <default-intercepotr-ref name="teamwarStack"/>
    设置全局返回值
    <global-results>
     <result name="login">/Login.html</result>
    </global-results>

    对应关系:  定义默认拦截器  -->   拦截器栈名 --> 拦截器一  --> 自定义拦截器名--class路径

  • 相关阅读:
    ArrayAdapter
    给ListView设置emptyView
    ListView中item定位
    clipChildren和clipToPadding
    【热文】 为什么很多硅谷工程师偏爱 OS X,而不是 Linux 或 Windows?
    【热文】 为什么程序员痴迷于猫?
    欢迎使用 MWeb
    Android动画学习(二)——Tween Animation
    将博客搬至CSDN
    Android动画学习(一)——Android动画系统框架简介
  • 原文地址:https://www.cnblogs.com/fg-fd/p/7264407.html
Copyright © 2011-2022 走看看