struts2 拦截器

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

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自定义拦截器是相当容易的一件事。
1.    
2.    
3.    
4.    
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;
/**
* 权限检查拦截器
*
* @author qiujy
* @version 1.0
*/
public class 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>
  
http://www.china-weixi.com/

struts2默认拦截器之prepare NULL 博文链接:https://blogwarning.iteye.com/blog/1390172 立即下载

相关推荐

Vivaldi天线HFSS建模实战:从参数化曲线到辐射优化的完整流程

本文详细介绍了Vivaldi天线在HFSS中的建模与优化全流程,涵盖参数化曲线绘制、馈电系统设计及性能验证等关键步骤。通过实战案例分享,帮助工程师掌握超宽带天线的HFSS建模技巧,提升雷达探测和通信系统设计效率。重点解析了指数渐变曲线建模、微带馈电优化等核心技术要点。

weixin_29228781的博客 273

Struts2拦截器(Interceptor)

Struts2拦截器(Interceptor)                                                               ++YONG原创,转载请注明 1.    理解拦截器1.1.    什么是拦截器:拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作...

闲云野鹤 247

Tinder养号防封攻略来了:最新Tinder养号流程和运营攻略

今天,我就来给大家分享一下Tinder养号的具体操作,以及针对Tinder账号被封的一些常见问题为大家做个答疑。

m0_67768117的博客 2万+

Struts2 拦截器处理普通Http请求和Ajax请求时拦截配置

近期发现以前的系统中存在一个如下的Bug Case:       在Session过期时,执行页面的ajax请求时,无法正常跳转到session过期提示页面,系统直接hold在那里不动,只有点击左侧菜单时,系统才能跳转到session过期提示页面。       经过调研,发现是拦截器的处理问题,拦截器只拦截了Http请求,而没有拦截Ajax请求,才导致出现上述Bug。      

dqswuyundong的专栏 1万+

顶会新宠!Gate+Attention创新思路发A会

性能提升:在Places2自然场景和CelebA-HQ人脸数据集上,与以往方法相比,该系统在自由形式掩码修复任务中取得了更高的质量和更低的误差(例如,平均ℓ1误差和ℓ2误差显著降低)。硬件效率提升:Griffin和Hawk在TPU-v3上的训练效率与Transformer相当,且在推理时具有更低的延迟和显著更高的吞吐量。门控卷积:提出了一种新的门控卷积机制,通过学习每个通道在每个空间位置的动态特征选择机制,解决了传统卷积将所有输入像素视为有效像素的问题。

2501_92785035的博客 974

Gromacs文件格式全解析:xtc vs trr vs cpt,哪种更适合你的模拟需求?

本文深入解析Gromacs分子动力学模拟中的三种核心文件格式xtc、trr和cpt,详细对比其技术特性和适用场景。xtc适合存储效率优先的场景,trr保留完整动力学数据,cpt确保模拟精确重启。通过实际配置示例和存储优化技巧,帮助用户根据模拟需求选择最佳格式组合,平衡分析灵活性与存储成本。

weixin_29281941的博客 96

struts2使用AbstractInterceptor拦截器 获取参数以及修改参数的值

public class AppLoginInterceptor extends AbstractInterceptor{ @Override public String intercept(ActionInvocation invocation) throws Exception { Map map = invocation.getInvocationContext().getSes...

无法预知未来 2642

Ansys Zemax实战:5步搞定多模光纤耦合效率优化(附IMAE操作数详解)

本文详细介绍了使用Ansys Zemax优化多模光纤耦合效率的5个关键步骤,包括几何图像分析设置、IMAE操作数应用及偏振效应处理。通过实战案例解析,帮助工程师快速掌握光纤耦合效率提升技巧,特别针对IMAE操作数的配置保存机制和菲涅尔损耗控制进行深度讲解。

potato的博客 690

Struts2【拦截器】就是这么简单

什么是拦截器 拦截器Interceptor.....拦截器是Struts的概念,它与过滤器是类似的...可以近似于看作是过滤器 为什么我们要使用拦截器 前面在介绍Struts的时候已经讲解过了,Struts为我们实现了很多的功能,比如数据自动封装阿..文件上传功能阿....Struts为我们提供的这些功能都是通过拦截器完成的...... ...

weixin_34221276的博客 187

使用moveit控制机械臂

位置设置:`target_pose.position.x = 0.12`, `target_pose.position.y = 0.41`, 和 `target_pose.position.z = 0.44` 分别设置了机械臂末端执行器的X, Y, 和 Z坐标。设定目标位置:`group.set_pose_target(target_pose)` 这一命令将之前定义的目标位置和姿态设置为当前机械臂组的目标,为接下来的路径规划做准备。在机械臂控制的过程中,设定精确的目标位置和姿态是实现精确操作的关键步骤。

realman_Rop的博客 3687

保姆级教程:用STM32单片机实现国标交流充电桩的CP信号检测(附完整代码)

本文详细介绍了基于STM32单片机实现国标交流充电桩CP信号检测的全流程,包括硬件设计、软件架构和充电控制实现。通过分压电路设计、ADC配置和状态机逻辑,确保充电过程的安全与可靠性,适用于新能源汽车充电桩开发。附完整代码和调试技巧,助力开发者快速掌握关键技术。

weixin_42641998的博客 251

Struts2之拦截器

Struts2之拦截器

qq_42640067的博客 1523

80、编程学习资源与x86知识全解析

本文详细介绍了编程学习中多个领域的优秀书籍和博客资源,涵盖逆向工程、C/C++、x86/x86-64架构、ARM、汇编语言、Java、UNIX、密码学等多个方向。同时,深入解析了x86架构的核心知识,包括术语、通用寄存器、FPU寄存器、SIMD寄存器、调试寄存器以及常用指令的使用方法和操作步骤。通过本文,读者可以系统地掌握底层编程知识,并应用于逆向工程、系统开发和性能优化等领域。

tree的博客 219

Struts2拦截器

一.自定义拦截器: struts2实现拦截器的方式有两种: ①.继承AbstractInterceptor类 ②.实现Interceptor接口 1 @Override 2 public String intercept(ActionInvocation arg0) throws Exception { 3 System.out.println("...

airenmin123456的博客 145

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【struts2】struts2拦截器

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

lmb55的专栏 1416

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Struts2配置拦截器

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

茨时代べ 的博客 571

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

fengdongkun的专栏 3564

Struts2的拦截器

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

weixin_40007271的博客 159

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

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

知且行的博客 1173

【Struts2框架】Struts2中拦截器

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

qq_41614424的博客 247

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
上一篇: 网页设计常用字体
下一篇: 全注解SSH
keepAction
博客等级 码龄15年 28粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值