Struts2——拦截器(Interceptor)

JavaScript教程-字符集,Unicode转义序列,标识符,数据类型,数字,未定义值,浮点数,字符串,引用数据类型,类型检测,类型转换,运算符,关系运算符, 前端学习 阅读详情

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

1、Struts2中内置的拦截器

常见的拦截器:
(1)params拦截器
这个拦截器把请求参数设置到相应的Action的属性去,并自动进行类型转换。
(2)modelDriven拦截器
如果Action实现ModelDriven接口,它将getModel()取得的模型对象存入OgnlValueStack中。
(3)execption拦截器
顾名思义,在抛出异常的时候,这个拦截器起作用。最好把它放在第一位,让它能捕获所有的异常。
(4)validation拦截器
调用验证框架读取 *-validation.xml文件,并且应用在这些文件中声明的校验。
(5)token拦截器
核对当前Action请求(request)的有效标识,防止重复提交Action请求。
(6)fileUpload拦截器
用来处理文件上传
(7)workflow拦截器
调用Action的validate方法,一旦有错误返回,重新定位到INPUT结果视图
(8)servletConfig
通过感知接口,获取感应对象

2、自定义拦截器

(1)步骤:

①自定义一个类,继承AbstractInterceptor抽象类,或实现Interceptor接口

②在struts.xml配置文件中注册拦截器

③在struts.xml配置文件中,设置默认拦截器或配置Action类的局部拦截器来使用。

(2)eg:该示例自定义拦截器拦截主页面,防止未登录用户强行登陆主页面。

①CheckLoginInterceptors.java(拦截器)

public class CheckLoginInterceptors extends AbstractInterceptor{

	private static final long serialVersionUID = 1L;
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		//获取Session对象中的用户信息
		String username = (String) ActionContext.getContext().getSession().get("USER_IN_SESSION");
		if(username!=null){
			return invocation.invoke();//如果username不为空,放行
		}
		return "input";//否则返回登录页面
	}
}
②LoginAction.java

public class LoginAction extends ActionSupport{

	private static final long serialVersionUID = 1L;
	private String username;
	private String password;
	
	@Override
	public String execute() throws Exception{
		System.out.println(username+","+password);
		//将用户名存入Session对象中
		ActionContext.getContext().getSession().put("USER_IN_SESSION", username);	
		return "success";
	}
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}
}

③struts.xml

<package name="interPkg" extends="struts-default" namespace="/">
		<!-- 注册拦截器 -->
		<interceptors>
			<interceptor name="checkLogin" class="interceptors.CheckLoginInterceptors"/>
		</interceptors>
		<!-- 指定默认拦截器 -->
		<default-interceptor-ref name="checkLogin"/>
		<!-- 全局视图 -->
		<global-results>
			<result name="input">
				/views/login/login.jsp
			</result>
		</global-results>

		<action name="login" class="action.interceptors.LoginAction">
                       <result name="success" type="redirectAction">
				<param name="namespace">/</param>
				<param name="actionName">main</param>
			</result>
		</action>

		<action name="main">
			<result name="success" type="dispatcher">
				/views/login/welcome.jsp
			</result>
		</action>
	</package>
上述代码存在问题:

a.登陆失败,永远进不了LoginAction

原因:进入LoginAction之前,需要判断session中是否有USER_IN_SESSION,而USER_IN_SESSION只有在LoginAction中才能设置。
结论:LoginAction不需要做登陆检查。

b.在LoginAction中再也获取不了请求参数

原因:当我们在<package>设置了默认的拦截器引用,那么<package>之前的默认的拦截器栈(defaultStack)就不引用了,那么defaultStack中的获取请求参数的拦截器也不再引用。

应改为如下:

	<package name="interPkg" extends="struts-default" namespace="/">
		<!-- 注册拦截器 -->
		<interceptors>
			<interceptor name="checkLogin" class="interceptors.CheckLoginInterceptors"/>
			<!-- 自定义拦截器栈,可放置多个拦截器 -->
			<interceptor-stack name="myStack">
				<interceptor-ref name="checkLogin"/>
				<interceptor-ref name="defaultStack"/>
			</interceptor-stack>
		</interceptors>
		<!-- 指定默认拦截器 -->
		<default-interceptor-ref name="myStack"/>
		<!-- 全局视图 -->
		<global-results>
			<result name="input">
				/views/login/login.jsp
			</result>
		</global-results>
		
		<action name="login" class="action.interceptors.LoginAction">
		<!-- 配置局部拦截器 -->
		<interceptor-ref name="defaultStack"/>
			<result name="success" type="redirectAction">
				<param name="namespace">/</param>
				<param name="actionName">main</param>
			</result>
		</action>
				
		<action name="main">
			<result name="success" type="dispatcher">
				/views/login/welcome.jsp
			</result>
		</action>
	</package>

④测试



使用隐身窗口重新登陆,试图登陆主页


MounRiver Studio(MRS)使用技巧:添加头文件目录;增加代码分组 MounRiver Studio(MRS)使用技巧:添加头文件目录 阅读详情

相关推荐

文华财经公式编程:麦语言简介及基础语法

文华财经公式语言(麦语言)是一种专门用于金融领域的编程语言,它是由文华财经公司开发的。提供了丰富的金融计算函数和数据处理功能,可以用于金融市场的数据分析、模型建立和交易策略的开发。例1:A:CLOSE;// 定义变量A为收盘价(盘中k线没有走完的时候A为最新价)。例2:MA5:=MA(C,5);// 定义收盘价的5周期均线(C为CLOSE简写)。例3:A:=REF(C,1);// 取得前一根k线的收盘价。

超哥量化的博客 1万+

Struts2之拦截器

Struts2之拦截器

qq_42640067的博客 1523

Ubuntu 22.04 安装 PostgreSQL + AGE + pgvector 完全指南

本教程详细介绍了在Ubuntu 22.04服务器上安装PostgreSQL数据库,并为其添加AGE图数据库扩展和pgvector向量搜索扩展的步骤。首先,更新系统并安装PostgreSQL,然后通过源码构建并安装AGE和pgvector扩展。接着,配置PostgreSQL以使用这些扩展,并可选地允许远程连接。教程还包括创建用户、设置密码、验证安装以及安装后的优化建议。最后,提供了常见问题的解决方法。通过本教程,用户可以在同一数据库中处理关系型数据、图数据和向量数据,为现代应用程序提供强大的数据支持。

这个是个人博客,记录生活中的一些日常。 1742

5.Struts 2拦截器(Interceptor)

任何优秀的MVC框架都会提供一些通用的操作,如请求数据的封装、类型转换、数据校验、解析上传的文件、防止表单的多次提交等。 Struts 2将它的核心功能放到拦截器中实现而不是集中在核心控制器中实现,把大部分控制器需要完成的工作按功能分开定义,每个拦截器完成一个功能,而完成这些功能的拦截器可以自由选择、灵活组合,需要哪些只需要在struts.xml指定即可,从而增加了框架的灵活性,有利于系统解耦。 拦截器的方法在Action执行之前或者执行之后自动的执行,从而将通用的操作动态地插入到了可插拔式。

相互学习 共同进步 1039

ARM的CI-700和Arteris的NoC对比

设计理念:CI-700注重于为移动和客户端SoC提供定制化的互连解决方案,而Arteris的NoC更侧重于提供灵活、可配置的网络互连技术,适用于多种应用场景。性能与功耗:CI-700通过系统级缓存和网状拓扑结构优化性能和功耗,而Arteris的NoC通过物理感知和多协议支持来提升性能和降低功耗。功能安全:Arteris的NoC提供了功能安全支持,这对于汽车和工业应用尤为重要,而CI-700虽然也关注安全性,但未明确提及功能安全支持。互操作性。

ygyglg的专栏 2622

深入解析组合逻辑环(combinational loop)的成因与解决方案

本文深入解析了数字电路设计中组合逻辑环(combinational loop)的成因与危害。通过边沿检测和中断轮询(round_robin)仲裁器等实例,揭示了代码如何意外形成环路,并对比了插入触发器、重构逻辑以及状态机思维三种核心解决方案,帮助硬件工程师从根本上避免这一常见设计陷阱,确保电路稳定可靠。

weixin_28278377的博客 313

struts2之拦截器详解

文章目录1 拦截器1.1 拦截器是什么1.2 拦截器的优点是什么1.3 预定义拦截器1.3.1 预定义拦截器1.3.1.1 params拦截器1.3.1.2 timer拦截器1.3.1.3 logger拦截器1.3.2 拦截器配置说明1.3.3 拦截器的调用顺序1.3.4 全局拦截器的配置1.3.5 使用execAndWait拦截器1.4 自定义拦截器1.4.1 自定义基础拦截器1.4.2 自定义拦截器示例1.4.3 自定义登录检查拦截器1.4.4 自定义logger拦截器 1 拦截器 1.1 拦截器是什么

上善若泪 2826

基于Matlab模拟六自由度Stewart并联机器人运动学逆解

在现代工业和科学领域中,机器人技术的发展已经取得了巨大的进步,为生产和研究提供了许多便利。其中,六自由度Stewart并联机器人是一种广泛应用于各种领域的机器人系统。它具有高精度、高刚度和高可靠性的特点,被广泛应用于飞行模拟器、手术机器人和运动仿真等领域。然而,要使Stewart并联机器人能够实现复杂的运动任务,我们需要了解其运动学逆解。运动学逆解是指根据机器人末端执行器的位置和姿态,计算出各个关节的角度和长度。这对于控制机器人的运动非常重要,因为它可以帮助我们确定机器人各个关节的运动范围和工作空间。

qq_59747472的博客 1127

Struts2的拦截器

关于自定义拦截器的建立

ccb1372098的博客 778

OdomLaserCalibraTool标定工具的使用及踩坑记录

首先欢迎扫码关注我的微信公众号【SLAM及ROS学习笔记】 GitHub地址 GitHub - tzhangZJU/OdomLaserCalibraTool: Extrinsic Calibration of a Odom and 2d Laser 作者博客 2d Laser 和 Odomter 内外参数标定工具原理及使用方法_知行合一-优快云博客 其实只是记录了一下我自己的标定过程,和错误解决方法。其实博客和GitHub中也有提及 Error1 这个是由于.

Studying…… 1757

使用Python实现深度学习模型:智能极端天气事件预测

在本项目中,我们成功利用Python和Keras库构建了一个基于LSTM的极端天气预测模型。通过时间序列数据,模型能够识别天气趋势并预测未来的极端天气事件。尽管这是一个简化的示例,但它为实际应用中如何利用深度学习进行天气预测提供了一个很好的基础。随着更精确的数据和更多的特征信息,类似的模型可以进一步扩展到其他极端事件预测上,如风暴预警、气象灾害评估等。

Echo_Wish 730

Struts2拦截器Interceptor创建与配置

一、Interceptor类创建这里有一点需要注意:如果放行了,就不会再执行最后return的结果了,参考论坛讨论:https://bbs.youkuaiyun.com/topics/370194837 12楼的回答:楼上是正解,这是struts2的机制,只要调用 invoke()方法后,如果能成功的调用了对应Action类中的方法,strtus2就会按照该方法的返回值去找对应的result,从而忽略拦截器的...

javae100的博客 4152

【AIGC】大模型面试高频考点07-注意力(Attention)篇

AIGC面试高频考点

一个内容严谨、方向前沿、极具实践价值的AI大模型技术分享站 3362

struts2拦截器interceptor的三种配置方法

1、struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 package name="struts2" extends="struts-default"> class="edu.hust.action.RegisterAction">

Golden_lion的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

浅谈Struts2拦截器Interceptor的设计原理

使用过struts2框架的朋友们都知道 拦截器Interceptor 在struts2中的地位是非常重要的,可以说是struts2在控制流调度部分的核心,并且struts2做为一个MVC框架,之所以在 controller层有如此强大的扩展能力,完全是由其拦截器的设计决定的,我们先看看下面这张图:

FcBayernMunchen的专栏 4962

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

struts2 拦截器 interceptor

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

vsddvsd的专栏 463

Struts2拦截器(Interceptor)的生命周期和使用

一、Interceptor的生命周期 1.初始化拦截器 @Override public void init() { // TODO Auto-generated method stub System.out.println("拦截器初始化"); } 2.拦截器执行 @Override public String intercept(ActionInvocation actionInvoca...

哈利路亚里路亚 965

Struts2 的核心——拦截器[Interceptor]

详细介绍了 Struts2中拦截器的执行原理、什么是拦截器、拦截器的配置和使用。

乐乐的专栏 3171

Struts2 拦截器的Interceptor接口与AbstractInterceptor抽象类

在学习Struts2框架的时候,遇到了拦截器,一开始拦截器都应该之间或者间接去实现Interceptor接口的,但是后来看到了AbstractInterceptor这个抽象类。之前学过的JAVA知识有点忘记了,所以特意查了一下关于抽象类和接口之间的关系。我们不想使用Interceptor接口去实现拦截器对象,是因为这个接口中有3个方法,但是我们在实际上我们主要用到的就是只有intercept()这

sinat_36841379的博客 2012

struts2-自定义struts拦截器interceptor

自定义拦截器的步骤

青树寒鸦的博客 192

Struts2 拦截器 Interceptor结构

为什么80%的码农都做不了架构师?>>> ...

weixin_33810006的博客 120

Struts2中的(Interceptor)拦截器的执行顺序

Interceptor的接口定义没有什么特别的地方,除了init和destory方法以外,intercept方法是实现整个拦截器机制的核心方法。而它所依赖的参数ActionInvocation则是我们之前章节中曾经提到过的著名的Action调度者。   Java代码   public abstract class AroundInterceptor extends A

这个少女IT男的博客 2403

struts2完成图片上传与拦截器Interceptor

struts2完成图片上传与拦截器Interceptor 图片上传: 今天在上次增删查改struts增删查改的要达到的效果:把图片上传到服务器并保存到本地,并且在jsp页面展示出来 效果如下图所示: 总共有三种上传方案: 1、上传到tomcat服务器 2、上传到指定文件目录,添加服务器与真实目录的映射关系,从而解耦上传文件与tomcat的关系文件服务器 3、在数据库表中建立二进制字段,将图片存...

hao_dream_xi的博客 153

Struts2--拦截器Interceptor

  拦截器是的我们可以在方法的执行前后定义执行的操作。可以作为一个非常有力的工具在数据验证,属性设置,安全,日志等等方面。   拦截器可以链接起来形成一个拦截器栈。框架会按照拦截器定义的顺序依次调用这些拦截器栈里的拦截器。   有时候还可以定义一个默认的拦截器(栈). <default-interceptor-ref name="secureStack"/> ...

dengjuyan2649的博客 187

struts2拦截器(interceptor) 笔记

创建一个Interceptor 可以自定义一个类实现com.opensymphony.xwork2.interceptor.Interceptor在这个接口中有三个方法 init destory intercept, intercept方法是真正拦截的方法。 在intercept方法中如果要向下继续执行,通过其参数ActionInvocation调用它的invoke()方法就可以。

我们始终是路人 371
上一篇: Struts2 入门
下一篇: Struts2——文件上传、下载
ack_Finding
博客等级 码龄10年 6粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值