Struts2拦截器

struts2拦截器 使用在默认拦截器栈中,对应多个拦截器,需要明确指定给某个拦截器的属性注入值。有放行的功能,如果有下一个拦截器,执行下一个,如果没有了,执行动作方法。中的问题,在定义拦截器栈时,还不知道哪些方法需要拦截,或不需要拦截。自定拦截器后需要重新调用默认拦截器,否者INPUT不在起作用。解决:在使用拦截器时,给属性注入值,指定拦截的方法。当配置了任意的一个拦截器,默认的拦截器栈不起作用。中的问题,配置了默认的拦截器栈,当登录时也被拦截。当配置多个拦截器时,按照配置的顺序执行。中使用拦截器,默认的拦截器栈不起作用。 阅读详情

Struts2拦截器(Interceptor)

    

1.    理解拦截器

1.1.    什么是拦截器:

拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

在Webwork的中文文档的解释为——拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行。同时也是提供了一种可以提取action中可重用的部分的方式。

谈到拦截器,还有一个词大家应该知道——拦截器链(Interceptor Chain,在Struts 2中称为拦截器栈Interceptor Stack)。拦截器链就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。

1.2.    拦截器的实现原理:

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

2.    拦截器的配置

Struts 2已经为您提供丰富多样的,功能齐全的拦截器实现。大家可以至struts2的jar包内的struts-default.xml查看关于默认的拦截器与拦截器链的配置。

Struts2(XWork)提供的拦截器的功能说明:

 

拦截器

名字

说明

Alias Interceptor

alias

在不同请求之间将请求参数在不同名字件转换,请求内容不变

Chaining Interceptor

chain

让前一个Action的属性可以被后一个Action访问,现在和chain类型的result(<result type=”chain”>)结合使用。

Checkbox Interceptor

checkbox

添加了checkbox自动处理代码,将没有选中的checkbox的内容设定为false,而html默认情况下不提交没有选中的checkbox。

Cookies Interceptor

cookies

使用配置的name,value来是指cookies

Conversion Error Interceptor

conversionError

将错误从ActionContext中添加到Action的属性字段中。

Create Session Interceptor

createSession

自动的创建HttpSession,用来为需要使用到HttpSession的拦截器服务。

Debugging Interceptor

debugging

提供不同的调试用的页面来展现内部的数据状况。

Execute and Wait Interceptor

execAndWait

在后台执行Action,同时将用户带到一个中间的等待页面。

Exception Interceptor

exception

将异常定位到一个画面

File Upload Interceptor

fileUpload

提供文件上传功能

I18n Interceptor

i18n

记录用户选择的locale

Logger Interceptor

logger

输出Action的名字

Message Store Interceptor

store

存储或者访问实现ValidationAware接口的Action类出现的消息,错误,字段错误等。

Model Driven Interceptor

model-driven

如果一个类实现了ModelDriven,将getModel得到的结果放在Value Stack中。

Scoped Model Driven

scoped-model-driven

如果一个Action实现了ScopedModelDriven,则这个拦截器会从相应的Scope中取出model调用Action的setModel方法将其放入Action内部。

Parameters Interceptor

params

将请求中的参数设置到Action中去。

Prepare Interceptor

prepare

如果Acton实现了Preparable,则该拦截器调用Action类的prepare方法。

Scope Interceptor

scope

将Action状态存入session和application的简单方法。

Servlet Config Interceptor

servletConfig

提供访问HttpServletRequest和HttpServletResponse的方法,以Map的方式访问。

Static Parameters Interceptor

staticParams

从struts.xml文件中将<action>中的<param>中的内容设置到对应的Action中。

Roles Interceptor

roles

确定用户是否具有JAAS指定的Role,否则不予执行。

Timer Interceptor

timer

输出Action执行的时间

Token Interceptor

token

通过Token来避免双击

Token Session Interceptor

tokenSession

和Token Interceptor一样,不过双击的时候把请求的数据存储在Session中

Validation Interceptor

validation

使用action-validation.xml文件中定义的内容校验提交的数据。

Workflow Interceptor

workflow

调用Action的validate方法,一旦有错误返回,重新定位到INPUT画面

Parameter Filter Interceptor

N/A

从参数列表中删除不必要的参数

Profiling Interceptor

profiling

通过参数激活profile

 

       在struts.xml文件中定义拦截器,拦截器栈:

<package name="my" extends="struts-default" namespace="/manage">

        <interceptors>

        <!-- 定义拦截器 -->

        <interceptor name="拦截器名" class="拦截器实现类"/>

        <!-- 定义拦截器栈 -->

        <interceptor-stack name="拦截器栈名">

             <interceptor-ref name="拦截器一"/>

             <interceptor-ref name="拦截器二"/>

        </interceptor-stack>

        </interceptors>

        ......

</package>

3.    使用拦截器

一旦定义了拦截器和拦截器栈后,就可以使用这个拦截器或拦截器栈来拦截Action了。拦截器的拦截行为将会在Action的exceute方法执行之前被执行。

<action name="userOpt" class="org.qiujy.web.struts2.action.UserAction">

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

            <result name="error">/error.jsp</result>

<!-- 使用拦截器,一般配置在result之后, -->

<!-- 引用系统默认的拦截器 -->

<interceptor-ref name="defaultStack"/>

            <interceptor-ref name="拦截器名或拦截器栈名"/>

        </action>

       此处需要注意的是,如果为Action指定了一个拦截器,则系统默认的拦截器栈将会失去作用。为了继续使用默认拦截器,所以上面配置文件中手动引入了默认拦截器。

4.    自定义拦截器

作为“框架(framework)”,可扩展性是不可或缺的。虽然,Struts 2为我们提供如此丰富的拦截器实现,但是这并不意味我们失去创建自定义拦截器的能力,恰恰相反,在Struts 2自定义拦截器是相当容易的一件事。

4.1.    实现拦截器类:

所有的Struts 2的拦截器都直接或间接实现接口com.opensymphony.xwork2.interceptor.Interceptor。该接口提供了三个方法:

1)      void init(); 在该拦截器被初始化之后,在该拦截器执行拦截之前,系统回调该方法。对于每个拦截器而言,此方法只执行一次。

2)      void destroy();该方法跟init()方法对应。在拦截器实例被销毁之前,系统将回调该方法。

3)      String intercept(ActionInvocation invocation) throws Exception; 该方法是用户需要实现的拦截动作。该方法会返回一个字符串作为逻辑视图。

除此之外,继承类com.opensymphony.xwork2.interceptor.AbstractInterceptor是更简单的一种实现拦截器类的方式,因为此类提供了init()和destroy()方法的空实现,这样我们只需要实现intercept方法。

4.2.    使用自定义拦截器:

两个步骤:

l  通过<interceptor …>元素来定义拦截器。

l  通过<interceptor-ref …>元素来使用拦截器。

5.    自定义拦截器示例

5.1.    问题描述:

使用自定义拦截器来完成用户权限的控制:当浏览者需要请求执行某个操作时,应用需要先检查浏览者是否登录,以及是否有足够的权限来执行该操作。

5.2.    实现权限控制拦截器类:

AuthorizationInterceptor.java

package org.qiujy.common;

 

import java.util.Map;

 

import com.opensymphony.xwork2.Action;

import com.opensymphony.xwork2.ActionInvocation;

import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

 

/**

 *权限检查拦截器

 *

 *@authorqiujy

 *@version1.0

 */

publicclass AuthorizationInterceptor extends AbstractInterceptor {

 

    /*

     * 拦截Action处理的拦截方法

     *

     */

    public String intercept(ActionInvocation invocation) throws Exception {

       

        Map session = invocation.getInvocationContext().getSession();

        String userName = (String) session.get("userName");

       

        if (null != userName && userName.equals("test")) {

            System.out.println("拦截器:合法用户登录---");

            return invocation.invoke();

        } else {

            System.out.println("拦截器:用户未登录---");

            return Action.LOGIN;

        }

    }

}

 

5.3.    配置权限控制拦截器:

struts.xml:

<!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="my" extends="struts-default">

       

        <interceptors>

        <!-- 定义权限控制拦截器 -->

        <interceptor name="authority"class="org.qiujy.common.AuthorizationInterceptor"/>

        </interceptors>

       

        <!-- 定义全局处理结果 -->

        <global-results>

        <!-- 逻辑名为login的结果,映射到/login.jsp页面 -->

        <result name="login">/login.jsp</result>

        </global-results>

       

        <action name="listall" class="org.qiujy.web.struts2.action.UserAction"method="listAllUser">

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

            <!-- 使用拦截器 -->

            <interceptor-ref name="defaultStack"/>

            <interceptor-ref name="authority"/>

        </action>

       

        <action name="userOpt" class="org.qiujy.web.struts2.action.UserAction">

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

        </action>

    </package>

</struts>

       其它页面见源代码。

5.4.    运行调试:

在浏览器地址栏直接输入http://localhost:8080/AuthorityInterceptorDemo/listall.action来访问,此动作配置了权限拦截器,所有被转到登录页面。

登录后:

再访问http://localhost:8080/AuthorityInterceptorDemo/listall.action这个链接:

如果为了简化struts.xml文件的配置,避免在每个Action重复配置该拦截器,可以将拦截器配置成了一个默认拦截器栈。如下:

<!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="my" extends="struts-default">

 

        <interceptors>

            <!-- 定义权限控制拦截器 -->

            <interceptor name="authority"

                class="org.qiujy.common.AuthorizationInterceptor" />

            <!-- 定义一个包含权限控制的拦截器栈 -->

            <interceptor-stack name="mydefault">

                <interceptor-ref name="defaultStack" />

                <interceptor-ref name="authority" />

            </interceptor-stack>

        </interceptors>

       

        <!-- 定义默认拦截器 -->

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

 

        <!-- 定义全局处理结果 -->

        <global-results>

            <!-- 逻辑名为login的结果,映射到/login.jsp页面 -->

            <result name="login">/login.jsp</result>

        </global-results>

 

        <action name="listall"

            class="org.qiujy.web.struts2.action.UserAction"

            method="listAllUser">

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

        </action>

    </package>

   

    <package name="font" extends="struts-default">

        <action name="userOpt" class="org.qiujy.web.struts2.action.UserAction">

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

        </action>

    </package>

</struts>

一旦在某个包下定义了默认拦截器栈,在该包下的所有action都会使用此拦截器栈。对于那些不想使用些拦截器栈的action,则应该将它放置在其它的包下。

JI卫云域名防红防封系统 最新版源码免授权 站长未测,据说供源码的说并没有搭建出来。而且发现有不少加密文件。就没有继续研究,免费发出来,有兴趣的可以下载搞搞 JI卫云防红系统,双重跳转,更稳定,生成短链接均支持QQ.微信内部直接打开支持iOS。 1、拦截查询 域名检测使用官方接口,实时返回查询结果,并自动屏蔽报废的域名 2、API集成 完整API开发文档,支持任何网站对接,使您的网站能够更快地推广。 3、后备方案 QQ,微信防红方案超过三种,确保有后备方案可以替换 立即下载

相关推荐

【CQUT】从零开始龙芯杯-开始前的准备

不同级别的Cpu对于vivado综合的时间有较大影响,其中Cpu的单核、多核性能以及cache性能影响权重较高。因此,为了保证学习进度和效率,我们建议在Cpu不低于I5 12400的环境下进行学习。Vivado2023.2安装包约100GB,为了保证成功安装建议留出300GB硬盘空间。龙芯杯的许多资料被托管在gitee,你需要git指令将资料克隆到本地。指定用书:CPU设计实战 Loongarch版 作者:汪文祥、邢金璋。Cpu性能对比网站:https://www.cpu114.com/

weixin_73689971的博客 906

Struts2之拦截器

Struts2之拦截器

qq_42640067的博客 1523

【扫地机器人测试】

本测试方案旨在系统性评估扫地机器人的核心功能、性能指标、可靠性及用户体验,验证产品是否符合设计规范、行业标准及市场需求。通过多维度、全场景的测试,精准定位产品缺陷与优化空间,为产品迭代提供数据支撑,确保上市产品的质量稳定性与用户满意度。

xuhuaiyaun的博客 1371

Struts2 拦截器详细配置

Struts2 拦截器详细配置过程 struts2中使用自定义拦截器   虽然Strtus2框架提供了许多拦截器,这些内置的拦截器实现了Struts2的大部分功能,因此大部分web应用程序的通用功能都可以通过直接使用这些拦截器来完成,但还有一些系统逻辑相关的通用功能,则可以通过自定义拦截器来实现。值得称道的是,Struts2的拦截器系统是如此的简单,易用。 一:实现拦截器 如果程序员...

梦想 311

树莓派3-改装wifi外置天线

声明:本文只是技术性探讨,改装引起的产品损坏等后果,由用户自负! 改装主要有两种方法 方法一:直接替换原来的天线 1、移除原有的小陶瓷天线,就在Made in PRC(或UK)那边的那个 清理一下阻焊剂方便天线接地(图中PRC左侧) 2、焊接天线 天线的屏蔽层焊接到清理完阻焊剂的地方,中间的信号线焊接到PRC右侧焊盘。 3、最终的样子

huayucong的博客 2万+

WPS JS宏智能识别代码段并设置样式(完整可用版)

之前,我们已经经历了多次迭代,解决了许多问题,比如识别代码块、处理多行导入、调整样式等。现在他们需要一份全面的文档来解释整个代码的结构和工作原理。(5)智能行分析(含URL和注解检测优化)function analyzeLineEnhanced(rawText,trimmedText,codeSymbols,codePatterns, singleLinePatterns)该解决方案在保持高性能的同时,提供了良好的可扩展性,能够适应不同组织的代码规范需求,是WPS生态中专业文档处理的创新实践。

搏博的专栏 1821

【struts2】struts2拦截器

/** *刘梦冰发表于2015-6-5 */struts2提供面向切面(AOP)编程的机制,拦截器便是一种成熟的AOP编程思想的实现,它提供一种机制使开发者能把相对独立的代码抽象出来,配置到action前后执行。拦截器interceptor类似于Filter,在执行action方法前后执行。就像多个Filter组成了Filter链,多个拦截器也组成了拦截器链。struts2中称拦截器链为拦截器栈

lmb55的专栏 1416

VisionMaster -Group循环、数组数据格式化

这里创建一个格式化工具,按照自己想要的模式格式化刚刚输出的数据。因为是检测多个物体,所以这里选择输出的是数组。第一次的模板很不满意,反复调整参数也没好,边缘不整齐,强迫症患者受不了。实测如果输入设置太多,会导致模块失效,所以尽量选择需要的少量参数。这里要打开循环使能,循环数值就是高精度匹配的匹配个数。Group输出设置里选择刚刚建立的数据集。左边是主流程,右边是组合模块内部流程。修改采图这里的曝光值,图像提亮一点。建一个数据集,把想要的数据收集起来。用TCP助手测试一下OK。成功得到了想要的数据。

weixin_69505365的博客 4529

Struts2配置拦截器

配置拦截器 在配置拦截器的时候可以为拦截器传递参数,对于已经配置好的拦截器,在引用时还可以覆盖它的参数 defaultStack拦截栈中的validation拦截器配置如下: <interceptor-ref name="validation"> <param name="excludeMethods">input,back,cancel</param> &...

茨时代べ 的博客 571

高通AI Engine SDK(QNN)使用教程(环境配置、模型转换、量化、推理、分析)

高通AI Engine使用教程

weixin_51031772的博客 1万+

5分钟搞定!用FunASR在本地快速部署达摩院Paraformer语音识别模型(附常见问题解决)

本文详细介绍了如何在本地快速部署阿里达摩院开源的Paraformer语音识别模型。通过FunASR工具包,用户可在5分钟内完成环境配置、模型下载与基础识别,并掌握批量处理、性能调优及构建API服务等进阶技巧。文章重点解析了Paraformer的非自回归架构带来的速度优势,并提供了音频格式转换、依赖冲突、显存不足等常见问题的实战解决方案,助力开发者实现高效、离线的语音转写应用。

p1q2r的博客 705

Struts2的拦截器、自定义拦截器、Struts2 验证机制

Struts2的拦截器、自定义拦截器、Struts2 验证机制         过滤器 servlet过滤器 过滤器与拦截器的区别: *相同点:都是起拦截作用 *不同点:       *作用范围: *过滤器:使用范围是J2EE范畴,任何一个web工程都可以使用过滤器 *拦截器:使用范围是struts2范畴,离不开struts2框架的     *完成的功能: *过滤器:拦

fengdongkun的专栏 3564

rk3588平台USB 3.0 -OAK深度相机适配方法

摘要:本文记录了OAK摄像头设备的配置与测试流程。主要内容包括:1)添加USB设备udev规则;2)拉取相关依赖库;3)安装Python3和pip;4)安装项目依赖;5)安装FFmpeg工具;6)测试摄像头功能并转换视频格式;7)将测试视频拷贝到U盘查看。操作步骤涵盖了从设备驱动配置到功能测试的完整流程,提供了详细的命令行操作指引。通过该文档可快速完成OAK摄像头的环境搭建和基础功能验证。

yy_hear的博客 325

Struts2学习总结(五):拦截器

在Struts中,拦截器可以在Action执行之前或之后被调用。Struts2框架的大多数核心功能都是作为拦截器来实现的。 例如为action动态的添加 输入验证(验证用户输入的是否正确) 对象组装(将用户输入的数据转换为对象的属性) 权限控制(如访问者为登录用户) 日志记录(记录action的执行情况) 这些操作都可以通过拦截器实现,而不用修改action 拦截器的工作流程如...

知且行的博客 1173

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

struts2 拦截器_Struts 2拦截器示例

struts2 拦截器Welcome to Struts 2 Interceptor Example. While working on Struts 2, most of the time you will spend on Action Classes but Interceptors are the backbone of Struts 2 Framework. 欢迎使用Struts 2拦截...

从零开始的教程世界 521

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【Struts2框架】Struts2中拦截器

1.拦截器 1.1什么是拦截器:在访问某个Action或者Action中的业务方法的时候,请求会经过一系列拦截器;当Result返回视图的时候也会经过一系列拦截器,真正有了这些拦截器的协助,才能使Struts2框架具备有很多自动化的功能(封装数据,类型转换,存储数据到作用域....),Struts2的拦截器是可拔插式的。 2.拦截器的分类: 内置拦截器:struts2框架默认自带的拦截...

qq_41614424的博客 247

Struts2的拦截器

什么是拦截器 interceptor:拦截器:起到拦截Action的作用。 Filter:过滤器,过滤从服务端向客户端发送的请求 interceptor:拦截器,拦截的是客户端对Action的访问更细粒度化的拦截(拦截Action中的具体方法) Struts2框架核心的功能都是依赖拦截器实现的 ...

weixin_40007271的博客 159

struts2 拦截器

struts2 拦截器 本文属转载文章,原出处请查看下方 原文:http://blog.youkuaiyun.com/csh624366188 拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理。同时,拦截器也可以让你将通用的代码模块化并作为可重用的类。Struts2中的很多特性都是由拦截器来...

Jim~LoveQ的博客 235

Struts2拦截器详解

在之前的文章中,我们已经涉及到了拦截器(Interceptor)的概念。downpour 写道拦截器是AOP中的概念,它本身是一段代码,可以通过定义“织入点”,来指定拦截器的代码在“织入点”的前后执行,从而起到拦截的作用。正如上面 Struts2的Reference中讲述的,Struts2的Interceptor,其拦截的对象是Action代码,可以定义在Action代码之前或者之后执行拦

笨鸟学飞的专栏 4185
上一篇: struts2中的跳转详解 ----“请求转发”和“重定向”之间的区别
下一篇: struts2用户注销 刷新整个iframe
wankaiming
博客等级 码龄15年 49粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值