• struts2对拦截器使用带实例


    拦截器是struts2的核心。拦截器可以拦截请求,控制视图的走向。那么怎么来实现自定义的拦截器呢?

    这里我们做一个例子。

    首先假现在做了两个jsp页面一个是登陆的信息的(用session来模拟),一个是没有登陆的信息的。

    有登陆信息的叫login.Jsp

      <%request.getSession().setAttribute("sess","fish" ) ;%>

       用户已登录

    没有登陆信息的叫做

    Quit.JSP

       <%request.getSession().removeAttribute("sess"); %>

                用户已退出!

    然后一个全局视图跳转的jsp页面,message.JSP

    ${message}

    现在定义一个拦截器:MyIntercerptor.Java

    packagecom.fish;

     

    importcom.opensymphony.xwork2.ActionContext;

    importcom.opensymphony.xwork2.ActionInvocation;

    importcom.opensymphony.xwork2.interceptor.AbstractInterceptor;

     

    public class MyInterceptor extends AbstractInterceptor {//继承拦截器的抽象类

     

     

        @Override

        public String intercept(ActionInvocation invokcation) throws Exception {

        Object session= ActionContext.getContext().getSession().get("sess");//首先或得这个session对象

            if(session!=null)//如果有sess说明用户登陆成功了

            return invokcation.invoke();//那么调用这个方法就可以中断这个intercept()方法。那么后面的代码就不会执行了。如果没有sess对象就说明了你没有登陆。那么就执行了下面的方法。这句话就是拦截器的核心。

            ActionContext.getContext().put("message", "你没有权限");//设置一个request对象

            return "success";//返回这个试图。

        }

     

    }

    接着我们看看struts2.xml

    <package name="fish"namespace="/test" extends="struts-default">

     

    <interceptors>

    <interceptor name="my"class="com.fish.MyInterceptor"></interceptor>//首先注册这个拦截器。如果要想拦截器发挥作用只要把拦截器放到action下面,<interceptor-ref name="XXX"/>调用就行了,但是在action只要调用拦截器就不会执行原来的struts自身的拦截器,说以我们定义一个拦截器栈,将系统的拦截器和自定义的拦截放在里面就行了,调用的时候主要吧拦截器栈写名字<interceptor-ref name="xx">

    <interceptor-stack name="aa">//注册一个拦截器栈,

    <interceptor-ref name="defaultStack"></interceptor-ref>//一般顺序就是struts自身的拦截器

    <interceptor-ref name="my"></interceptor-ref>//然后自定义的拦截器

    </interceptor-stack>

    </interceptors>

    <global-results><result>/message.jsp</result></global-results>

    <action name="redfish"  class="com.fish.Test"method="execute">

    <result name="success">/message.jsp</result>

    <interceptor-ref name="aa"></interceptor-ref>//这里调用的拦截器栈

    </action>

    </package>

     

    测试结果:

    启动服务器。直接

    http://127.0.0.1:8080/struts2test7/test/redfish

    这样的话会显示:“权限不够”,显然是因为拦截器已经起作用了。因为开始session没有赋值

    如果: http://127.0.0.1:8080/struts2test7/login.jsp

    然后:http://127.0.0.1:8080/struts2test7/test/redfish

    这样会显示:“你好”,因为这样session就有了。有了session就相当于有权限,拦截器就不会拦截了,可以自由访问action的试图。

  • 相关阅读:
    对react的context的研究
    react组件通信props属性传递
    react的组件的两种形式
    对react构造函数研究--------引用
    ReactRouter基本使用2
    ReactRouter基本使用1
    react生命周期
    对react进行研究----入门
    Nginx源码安装
    Vmware克隆linux6虚拟机后网络问题
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3190278.html
Copyright © 2020-2023  润新知