`

interceptor

    博客分类:
  • web
阅读更多

   <interceptor name="alias" class="com.opensymphony.xwork.interceptor.AliasInterceptor"/>

   <!--不同的request的相似参数别名转化-->

            <interceptor name="autowiring" class="com.opensymphony.xwork.spring.interceptor.ActionAutowiringInterceptor"/>

            <!--自动装配 就是无需显式的指定bean的合作者,由framework根据setter方法去找到相应的bean,并完成设置工作。-->

            <interceptor name="chain" class="com.opensymphony.xwork.interceptor.ChainingInterceptor"/>

            <!--将前一个执行结束的Action属性设置到当前的Action中。它被用在ResultType为“chain”指定结果的Action中,该结果Action对象会从OgnlValueStack中获得前一个Action对应的属性,它实现Action链之间的数据传递;-->

            <interceptor name="component" class="com.opensymphony.xwork.interceptor.component.ComponentInterceptor"/>

            <!--激活组件功能支持,让注册过的组件在当前Action中可用,即为Action提供IoC(依赖倒转控制)框架的支持;-->

            <interceptor name="conversionError" class="com.opensymphony.webwork.interceptor.WebWorkConversionErrorInterceptor"/>

            <!--用来处理框架进行类型转化(Type Conversion)时的出错信息。它将存储在ActionContext中的类型转化(Type Conversion)错误信息转化成相应的Action字段的错误信息,保存在堆栈中。根据需要,可以将这些错误信息在视图中显示出来。-->

            <interceptor name="createSession" class="com.opensymphony.webwork.interceptor.CreateSessionInterceptor" />

            <!--自动创建一个httpsession对象,对于某些需要有httpsession对象才能正常工作的拦截器有用-->

            <interceptor name="external-ref" class="com.opensymphony.xwork.interceptor.ExternalReferencesInterceptor"/>

            <!--标记指定外部引用;name属性值要与Action类中的属性名一致 -->

            <interceptor name="execAndWait" class="com.opensymphony.webwork.interceptor.ExecuteAndWaitInterceptor"/>

            <!--后台执行action,发送给用户等待画面-->

            <interceptor name="exception" class="com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor"/>

            <!--提供了异常处理的主要核心功能,异常处理允许你把一个异常映射到一个结果码-->

            <interceptor name="fileUpload" class="com.opensymphony.webwork.interceptor.FileUploadInterceptor"/>

            <!--支持文件上传的拦截器,参数 [file name]是被html表单中上传得文件的名字 maximumsize这个市允许上传到action中的文件最大长度(以byte为单位,注意这个参数和在webwork.properties中定义的属性没有关系,默认2mb)

                 allowedtype 以逗号分割的contenttype类型列表(例如text/html),这些列表示这个拦截器允许的可以上传到action中contenttype。如果没有指定 就是允许任何上传类型

            <action name="doUpload" class="com.examples.UploadAction">

              <interceptor-ref name="fileUpload"/>

              <interceptor-ref name="basicstack"/>

            </action>

            -->

            <interceptor name="i18n" class="com.opensymphony.xwork.interceptor.I18nInterceptor"/>

            <!--把所选的地域放入session中

              负责把session中指定的区域设置为当前请求的区域设置,并且这个拦截器还会根据请求中的参数来改变区域设置。

              这就说你可以用来动态的改变用户session中区域设置。这对于实现多语言支持并允许用户在任何时候更改语言很有用。

            -->

            <interceptor name="logger" class="com.opensymphony.xwork.interceptor.LoggingInterceptor"/>

            <!--在日志信息中输出要执行的Action信息-->

            <interceptor name="model-driven" class="com.opensymphony.xwork.interceptor.ModelDrivenInterceptor"/>

            <!--如果Action实现ModelDriven接口,它将getModel()取得的模型对象存入OgnlValueStack中-->

            <interceptor name="params" class="com.opensymphony.xwork.interceptor.ParametersInterceptor"/>

            <!--将Request请求的参数设置到相应Action对象的属性中,用户注册例子用到过这个拦截器-->

            <interceptor name="prepare" class="com.opensymphony.xwork.interceptor.PrepareInterceptor"/>

            <!--在Action执行之前调用Action的prepare()方法,这个方法是用来准备Action执行之前要做的工作。它要求我们的Action必需实现com.opensymphony.xwork. Preparable接口

            当你需要在action中的方法执行之前执行一些逻辑。

            <!-- Calls the params interceptor twice, allowing you to pre-load data for the second time parameters are set -->

      <action name="someAction" class="com.examples.SomeAction">

       <interceptor-ref name="params"/>

       <interceptor-ref name="prepare"/>

       <interceptor-ref name="basicStack"/>

       <result name="success">good_result.ftl</result>

      </action>

            -->

            <interceptor name="static-params" class="com.opensymphony.xwork.interceptor.StaticParametersInterceptor"/>

            <!--将xwork.xml配置文件里定义的Action参数,设置到对应的Action中。Action参数使用<param />标签,是<action />标签的直接子元素。我们这里定义的Action类必需实现com.opensymphony.xwork.config.entities. Parameterizable接口-->

 

            <interceptor name="scope" class="com.opensymphony.webwork.interceptor.ScopeInterceptor"/>

            <!--为了实现在webwork中实现类似向导的功能而设计的,其中的问题是,一些应用程序有些在application范围内的公用参数,例如pagelen(每个页面的记录数)。有了这个拦截器就不用让每个action都检查这样的参数是否存在,而是让这个拦截器去检查并把这些参数从session中取出

            参数:

            session 一个限制在session范围内的action属性列表

            application一个限制在application范围内的属性列表

            key 一个session/application 属性的主键前缀

               class 根据action的名称空间和类来创建一个不重复的前缀,这是默认值

               action根据action的名称空间和action的名称创建一个不重复的前缀

               任意一个字符串作为主键前缀

            type 下列支之一

               start 表示这是一个向导的开始action。所有session范围内的属性将被重设为默认值

               end 表示在这个action执行以后,session范围内的属性将会从session中清除

               any 其他值或者没有值意思这时可一个中间action。

               <!-- ##filter#orderBy###########action#######,#############scope###. #session#############Session##########.######Application######-->

        <action name="someAction" class="com.examples.SomeAction">

        <interceptor-ref name="basicStack"/>

        <interceptor-ref name="hibernate"/>

        <interceptor-ref name="scope">

        <param name="session">filter,orderBy</param>

        <param name="autoCreateSession">true</param>

        </interceptor-ref>

            -->

            <interceptor name="servlet-config" class="com.opensymphony.webwork.interceptor.ServletConfigInterceptor"/>

            <!--

             提供Action直接对HttpServletRequest或HttpServletResponse等JavaServlet api的访问,Action要实现相应的接口,例如:ServletRequestAware或ServletResponseAware等。如果必需要提供对JavaServlet api的访问,我们建议使用ServletActionContext,在前面ActionContext章节中有介绍。

            -->

            <interceptor name="sessionAutowiring" class="com.opensymphony.webwork.spring.interceptor.SessionContextAutowiringInterceptor"/>

 

            <interceptor name="timer" class="com.opensymphony.xwork.interceptor.TimerInterceptor"/>

            <!--记录Action执行的时间,并做为日志信息输出-->

            <interceptor name="token" class="com.opensymphony.webwork.interceptor.TokenInterceptor"/>

            <!--核对当前Action请求(request)的有效标识,防止重复提交Action请求(request)。-->

            <interceptor name="token-session" class="com.opensymphony.webwork.interceptor.TokenSessionStoreInterceptor"/>

            <!--功能同上,但是当提交无效的Action请求标识时,它会将请求数据保存到session中。-->

            <interceptor name="validation" class="com.opensymphony.xwork.validator.ValidationInterceptor"/>

           <!--实现使用xml配置文件({Action}-validation.xml)对Action属性值进行验证,详细请看后面介绍的验证框架。-->

            <interceptor name="workflow" class="com.opensymphony.xwork.interceptor.DefaultWorkflowInterceptor"/>

      <!--调用Action类的验证功能,假设Action使用ValidationAware实现验证(ActionSupport提供此功能),如果验证没有通过,workflow会将请求返回到input视图(Action的<result />中定义的)。-->

 

--------------------------------------------------------------------------------------------------------------------

 

1.interceptor的配置

方法1. 普通配置法

  1. <struts>
  2.     <packagename="struts2"extends="struts-default">
  3.         <interceptors>
  4.             <interceptorname="myInterceptor"class="edu.hust.interceptor.MyInterceptor"></interceptor>
  5.         </interceptors>
  6.         <actionname="register"class="edu.hust.action.RegisterAction">
  7.             <resultname="input">/register.jsp</result>
  8.             <result>/result.jsp</result>
  9.             
  10.             <!-- 在自定义interceptor并将其ref时, 系统会覆盖掉默认的interceptor-stack(defaultStack), 为了保证系统默认的defaultStack不受印象, 我们需要显式的将其引入 -->
  11.             <!-- 注意两个interceptor-ref的顺序, 顺序不同, 执行效果也不同: 先配置的先执行/后配置的先退出(先进后出) -->
  12.             <interceptor-refname="defaultStack"></interceptor-ref>
  13.             <interceptor-refname="myInterceptor"></interceptor-ref>
  14.         </action>
  15.     </package>
  16. </struts>

方法2. 配置拦截器栈(即将多个interceptor串联的一种元素)。然后在<action>中引入该拦截器栈就可以了。

  1. <struts>
  2.     <packagename="struts2"extends="struts-default">
  3.         
  4.         <interceptors>
  5.             <interceptorname="myInterceptor"class="edu.hust.interceptor.MyInterceptor"></interceptor>
  6.         
  7.             <interceptor-stackname="myInterceptorStack">
  8.                 <interceptor-refname="myInterceptor"></interceptor-ref>
  9.                 <interceptor-refname="defaultStack"></interceptor-ref>
  10.             </interceptor-stack>
  11.         </interceptors>
  12.         
  13.         <actionname="register"class="edu.hust.action.RegisterAction">
  14.             <resultname="input">/register.jsp</result>
  15.             <result>/result.jsp</result>
  16.             
  17.             <interceptor-refname="myInterceptorStack"></interceptor-ref>
  18.         </action>
  19.     </package>
  20. </struts>

方法3. 修改默认拦截器,将自定义的拦截器栈定义为struts2的默认拦截器。

  1. <struts>
  2.     <packagename="struts2"extends="struts-default">
  3.         
  4.         <interceptors>
  5.             <interceptorname="myInterceptor"class="edu.hust.interceptor.MyInterceptor"></interceptor>
  6.             <interceptor-stackname="myInterceptorStack">
  7.                 <interceptor-refname="myInterceptor"></interceptor-ref>
  8.                 <interceptor-refname="defaultStack"></interceptor-ref>
  9.             </interceptor-stack>
  10.         </interceptors>
  11.         <!-- 此默认interceptor是针对所有action的 -->
  12.         <!-- 如果某个action中引入了interceptor, 则在这个action中此默认interceptor就会失效 -->
  13.         <default-interceptor-refname="myInterceptorStack"></default-interceptor-ref>
  14.         
  15.         <actionname="register"class="edu.hust.action.RegisterAction">
  16.             <resultname="input">/register.jsp</result>
  17.             <result>/result.jsp</result>
  18.         </action>
  19.         
  20.     </package>
  21. </struts>

2. Interceptor的角色对象

(1)拦截目标对象(被代理对象),这里目标对象就是action;

(2)拦截器(一个类,动态的将某些方法插入到目标对象的某方法的before、after);

(3)对目标对象生成的(动态)代理对象(代理对象内部方法综合了目标对象方法+拦截器方法)。程序最终执行的是目标对象的代理,而这个代理已经插入了interceptor。

拦截器作用:拦截action。interceptor相当于一个入口和出口,通过interceptor进入action,执行完action的代码再通过interceptor出去。

针对"struts2 -- interceptor(Interceptor怎么写)"这篇文章的MyInterceptor.class和MyInterceptor2.class。根据下面的配置文件执行程序

  1. <struts>
  2.     <packagename="struts2"extends="struts-default">
  3.         
  4.         <interceptors>
  5.             <interceptorname="myInterceptor"class="edu.hust.interceptor.MyInterceptor"></interceptor>
  6.             <interceptorname="myInterceptor2"class="edu.hust.interceptor.MyInterceptor2"></interceptor>
  7.             <interceptor-stackname="myInterceptorStack">
  8.                 <interceptor-refname="myInterceptor"></interceptor-ref>
  9.                 <interceptor-refname="myInterceptor2"></interceptor-ref>
  10.                 <interceptor-refname="defaultStack"></interceptor-ref>
  11.             </interceptor-stack>
  12.         </interceptors>
  13.         
  14.         <default-interceptor-refname="myInterceptorStack"></default-interceptor-ref>
  15.         
  16.         <actionname="register"class="edu.hust.action.RegisterAction">
  17.             <resultname="input">/register.jsp</result>
  18.             <result>/result.jsp</result>
  19.         </action>
  20.         
  21.     </package>
  22. </struts>

Console会得到以下打印输出
intercept start
intercept2 start
2008-9-19 19:42:06 com.opensymphony.xwork2.validator.ActionValidatorManagerFactory <clinit>
信息: Detected AnnotationActionValidatorManager, initializing it...
intercept2 finish
intercept finish

这个结果解释了"interceptor相当于一个入口和出口,通过interceptor进入action,执行完action的代码再通过interceptor出去"这句话。

3. extends MethodFilterInterceptor的拦截器如何配置哪些方法该拦截、哪些方法不该拦截(针对方法拦截的配置)

  1. <struts>
  2.     <packagename="struts2"extends="struts-default">
  3.         
  4.         <interceptors>
  5.             <interceptorname="myInterceptor3"class="edu.hust.interceptor.MyInterceptor3"></interceptor>
  6.         </interceptors>
  7.         
  8.         <actionname="register"class="edu.hust.action.RegisterAction"method="queryAll">
  9.             <resultname="input">/register.jsp</result>
  10.             <result>/result.jsp</result>
  11.             <!-- myInterceptor3拦截器只对RegisterAction中的queryAll()方法和insert()方法进行了拦截, 其他方法未进行拦截 -->
  12.             <interceptor-refname="myInterceptor3">
  13.                 <paramname="includeMethods">queryAll, execute</param>
  14.             </interceptor-ref>
  15.             <interceptor-refname="defaultStack"></interceptor-ref>
  16.         </action>
  17.         
  18.         <actionname="register"class="edu.hust.action.RegisterAction"method="insert">
  19.             <resultname="input">/register.jsp</result>
  20.             <result>/result.jsp</result>
  21.             <interceptor-refname="myInterceptor3">
  22.                 <paramname="includeMethods">queryAll, insert</param>
  23.             </interceptor-ref>
  24.             <interceptor-refname="defaultStack"></interceptor-ref>
  25.         </action>
  26.         
  27.         <actionname="register"class="edu.hust.action.RegisterAction"method="update">
  28.             <resultname="input">/register.jsp</result>
  29.             <result>/result.jsp</result>
  30.             <interceptor-refname="myInterceptor3">
  31.                 <paramname="includeMethods">queryAll, insert</param>
  32.             </interceptor-ref>
  33.             <interceptor-refname="defaultStack"></interceptor-ref>
  34.         </action>
  35.         
  36.     </package>
  37. </struts>

 

分享到:
评论

相关推荐

    利用反射和动态代理机制实现自定义拦截器Interceptor

    利用反射和动态代理机制实现自定义拦截器Interceptor 在本文中,我们将探讨如何利用反射和动态代理机制来实现自定义拦截器Interceptor。拦截器Interceptor是一种常见的设计模式,用于在方法调用前后执行某些操作,...

    Postman-Interceptor-V1.1.2.zip

    这个"Postman-Interceptor-V1.1.2.zip"文件就是Interceptor的安装包,版本为1.1.2,适用于Chrome浏览器。 Interceptor的主要功能包括: 1. **实时同步**: 当在Chrome浏览器中进行网页操作时,Interceptor可以捕获...

    postman及interceptor插件下载

    - **Interceptor安装**:在Postman应用内,选择“Settings” &gt; “Extensions”,找到Interceptor并安装。 - **启用Interceptor**:在浏览器扩展中启用Interceptor,并在Postman应用中确认连接。 4. **最佳实践**...

    详解Retrofit Interceptor(拦截器) 拦截请求并做相关处理

    Retrofit Interceptor(拦截器) 的使用和实现 Retrofit Interceptor(拦截器) 是一个非常重要的组件,在 Retrofit 框架中扮演着关键角色。拦截器可以拦截请求并做相关处理,典型的处理方式是修改 header,但我们也...

    Postman Interceptor for Chrome 0.2.26

    Postman Interceptor是一款强大的工具,专门设计用于与Postman集成,以增强Chrome浏览器中的网络请求管理功能。在本文中,我们将深入探讨Postman Interceptor及其在Chrome 0.2.26_0版本中的特点、用途以及如何进行...

    谷歌浏览器插件—— Ajax Interceptor

    **Ajax Interceptor:深入理解与应用** Ajax Interceptor 是一款专为谷歌浏览器(Chrome)设计的插件,它允许开发者在Ajax请求发送后和响应返回前进行干预,从而实现对AJAX请求数据的修改。这款插件对于前端开发、...

    接口测试插件 Postman Interceptor 1.1.1

    **接口测试插件 Postman Interceptor 1.1.1** 接口测试是软件开发过程中的重要环节,它确保了不同系统、服务或组件之间的通信功能正常。Postman是一款广泛使用的接口测试工具,提供了丰富的功能来简化和自动化接口...

    postman及interceptor安装包

    总的来说,Postman及Interceptor的组合提供了一套强大的API开发和测试解决方案,无论是在个人项目还是团队协作中,都能大大提高工作效率和准确性。通过熟练掌握这两个工具,开发者可以在API开发的全生命周期中受益。

    离线安装postman及interceptor

    - 找到所有包含原Postman Interceptor ID(例如`aicmkgpgakddgnaphhhpliifpcfhicfo`)的地方,并将其替换为实际安装的Postman Interceptor插件ID(例如`dadamddfbngjafhgcmnbhnaekcipphfl`)。 - 保存文件后,在...

    struts2 interceptor介绍

    ### Struts2 Interceptor深入解析 #### 一、Interceptor概览与核心机制 在Struts2框架中,Interceptor(拦截器)扮演着极其关键的角色,它不仅能够增强框架的灵活性,还能提供一系列强大的功能,包括但不限于权限...

    postman+postman interceptor(亲测可用)

    Interceptor是Postman的一个扩展插件,它为Postman增加了更多功能,比如实时同步浏览器的网络请求、捕获和发送SSL证书等。 Postman Interceptor的主要功能包括: 1. **实时同步**:当你在浏览器中浏览网页时,...

    Interceptor框架的实现

    Interceptor框架在软件开发中起着关键作用,尤其是在Java企业级应用中,如Spring AOP(面向切面编程)和各种框架中的拦截器机制。本文将深入探讨Interceptor框架的实现,主要涉及Java代理和反射技术。 首先,理解...

    postman+Interceptor.rar

    《Postman与Interceptor的深度应用解析》 在IT行业中,Postman是一款不可或缺的API测试工具,而Interceptor则是其强大的辅助插件,它们的结合使用能够极大地提升开发者在接口测试中的效率和准确性。本文将深入探讨...

    postman interceptor

    Postman Interceptor是一款非常实用的工具,主要用于提升API测试与开发的效率,它是由Postman公司推出的配套插件。在Postman这个强大的API开发和测试环境中,Interceptor扮演着不可或缺的角色。下面将详细介绍...

    struts2 Interceptor拦截器

    ### Struts2 Interceptor 拦截器详解 #### 一、概述 在现代Web开发中,特别是基于Java的Web应用程序开发中,Struts2框架因其简洁性和强大的扩展能力而备受青睐。Struts2框架的核心设计理念之一是MVC(Model-View-...

    Struts2 拦截器 Interceptor

    ### Struts2 拦截器 Interceptor #### 一、概述 在Struts2框架中,拦截器(Interceptor)是一种非常重要的机制,它能够帮助开发者实现诸如权限控制、事务管理、日志记录等跨切关注点的功能。通过定义不同的拦截器...

    Postman-Interceptor_0.2.20压缩文件

    Postman是一款广受欢迎的API开发、测试和文档管理工具,其Interceptor组件是它的一个重要功能扩展。Interceptor允许Postman与浏览器进行同步,捕获和发送网络请求,这对于开发者在调试和测试API时非常有用。本篇文章...

    Struts2_interceptor_和_filter区别

    标题和描述均聚焦于“Struts2_interceptor_和_filter区别”,这暗示着对比和解析Struts2框架中拦截器(Interceptor)与过滤器(Filter)的差异是本文的核心议题。接下来,我们将深入探讨这两者在功能、实现方式以及...

    Postman-Interceptor.rar

    Postman Interceptor是Postman的一个重要组成部分,它扩展了Postman的功能,实现了与浏览器请求的同步,让开发者能够在Postman中直接捕获和测试浏览器中的网络请求。 Interceptor主要服务于两个应用场景: 1. **...

    struts2 Interceptor详解

    Struts2 Interceptor详解 Struts2作为一款流行的Java Web框架,其强大的功能之一就是拦截器(Interceptor)。拦截器在MVC模式中扮演着重要角色,它可以对请求进行预处理和后处理,提供了灵活的扩展机制,使得业务...

Global site tag (gtag.js) - Google Analytics