Token拦截器
问题描述
提交表单时,可能出现这样的情况,如果上次提交成功,按浏览器的返回按钮,再提交一次会出现同一份数据提交两次的情况。如果这份表单不幸两次写入数据库,可能会赞成问题。
Struts提供两个拦截器用来阻止这种用户无意的行为可能导致的重复提交问题。
实现过程
1.在提交的表单中,添加<s:token>标记。
2.配置TokenInterceptor或TokenSessionInterceptor。
3.配置invoke.token结果,决定如果遇到重复提交时需要返回的页面。</s:token>
另外可以在struts.properties文件中提供struts.messages.invalid.token健值决定如果发生Token的错误信息。
TokenInterceptor实现原理
<s:token>标记的作用是在显示表单页面时,服务器(由TokenHelper类实现)会生成一个唯一的令牌键值对,并在提交表单时发送给服务器。
服务器会检测客户端提交的令牌和缓存的令牌进行比较,如果是有效的则清除服务器端缓存并继续处理,如果是无效的,则返回invalid.token结果(通常显示一个提示页面)。</s:token>
TokenSessionStoreInterceptor实现原理
TokenSessionStoreInterceptor扩展至TokenInterceptor,改写了处理无效令牌的机制,不是返回一个 invalid.token结果,而是返回上一次成功提交后的结果页面,这是如何做到的呢?
TokenSessionStoreInterceptor会针对每次拦截成功执行的ActionInvocation根据令牌的健值为标识符进行缓存, 如果发生重复提交,则取出缓存的ActionInvocation中的Result对象返回。
ExecuteAndWaitInterceptor
此拦截器主要目的是给一些长任务请求更好的用户体验,在长任务执行过程中显示给用户一个等待页面,可以通过配置wait结果页面提供一个自定义的等待页 面,否则框架将提供一个缺省的比较丑陋的等待页面。
注意:
此拦截器必须放在拦截器堆栈的最后。
此拦截器基于会话的,这意味着同一个会话中同时只能执行一个此请求。
实现原理
1.拦截器会将当前请求包装在一个后台线程中执行(由BackgroundProcess类实现)。
2.在后台线程执行的过程中,拦截器会每隔100微秒检查一下,后台线程是否执行结束。
3.如果在指定的延迟后,后台线程依然没有结束,将返回一个等待页面。
4.如果在指定的延迟后,后台线程运行结束,将返回请求的结果页面。
注意:
因为Action运行在一个后台进程,Action无法使用ActionContext,因为ActionContext是线程本地的。如果必须访问比如 会话数据,你必须让Action实现SessionAware接口,而不是调用ActionContext.getSession方法。
分享到:
相关推荐
总结来说,Struts2.0的拦截器提供了一种灵活的方式来扩展和控制应用程序的行为,而CRUD操作则通过Action类实现。理解这些核心概念对于有效地利用Struts2开发Web应用至关重要。通过熟练掌握这些知识,开发者可以更...
### Struts2.0拦截器详解 #### 一、拦截器概述 在Struts2框架中,拦截器(interceptor)是一种非常重要的机制,用于在执行Action前后进行一系列预处理或后处理的操作。拦截器可以用来执行如参数拦截、类型转换、输入...
下面我们将深入探讨Struts2.0拦截器的完整知识体系。 1. **拦截器的概念** 拦截器类似于AOP(面向切面编程)中的通知,它是在Action执行前或执行后进行拦截,并可以修改Action的执行流程。在Struts2中,拦截器是...
五、Struts2.0拦截器 拦截器是Struts2.0实现业务逻辑的重要手段,如ValidationInterceptor进行数据校验,ExceptionMappingInterceptor处理异常,LoginInterceptor实现登录控制等。拦截器可以自由组合,形成拦截器栈...
07 Struts 2的基石——拦截器(Interceptor) 08 在Struts 2中实现IoC 09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新表单标志的使用 13 Struts 2与AJAX
Struts 2.0系列(MAX),pdf格式,全...Struts 2的基石——拦截器(Interceptor) 在Struts 2中实现IoC 在Struts 2中实现文件上传 在Struts 2中实现CRUD Struts 2中的OGNL Strus 2的新表单标志的使用 Struts 2与AJAX
5. **Struts2拦截器**:介绍Struts2的核心组件之一——拦截器,如何使用拦截器进行日志记录、权限验证等操作。 6. **结果类型与导航**:讲解如何配置结果类型,如Redirect、RedirectAction、Stream等,以及基于...
Struts2.0采用了拦截器(Interceptor)机制,这是一种非常强大的特性,允许开发者在Action执行前后进行一系列操作,如参数填充、验证、事务控制等。拦截器的设计遵循AOP(Aspect Oriented Programming)思想,可以...
Struts 2.0 是一个基于MVC设计模式的Java Web框架,它的核心功能之一是拦截器(Interceptor),这是实现业务逻辑控制和增强应用程序功能的重要组件。在Struts 2中,拦截器扮演着中间人的角色,它们在Action调用前后...
Struts2.0是Java Web开发中的一个热门框架,它基于Model-View-Controller(MVC)设计模式,为开发者提供了构建动态Web应用程序的强大工具。API文档是理解任何框架核心功能的关键,对于Struts2.0也不例外。让我们深入...
Struts2.0是一款强大的Java Web框架,它在MVC(Model-View-Controller)设计模式的基础上,提供了灵活且强大的架构来构建企业级的Web应用程序。这个“Struts2.0 Jar包”包含了所有必要的库文件,使得开发者可以便捷...
本详细讲解将涵盖四个关键主题:拦截器、标签、配置详解以及Struts 2.0的基础知识。 **1. Struts 2.0 拦截器** 拦截器是Struts 2的核心特性之一,它们类似于AOP(面向切面编程)的概念,可以实现在动作执行前后插入...
Struts2.0 jar包是Java Web开发中的一个重要组件,它是Apache Struts框架的一个特定版本。Struts2是一个基于MVC(Model-View-Controller)设计模式的开源框架,用于构建可维护性高、结构清晰的Java应用。该框架极大...
2. **拦截器(Interceptor)**:拦截器是Struts2.0的一大特色,它可以实现通用的功能,如日志、权限检查等,无需在每个Action中重复编写。通过配置拦截器栈,可以灵活地控制请求的处理流程。 3. **OGNL(Object-...
3. **拦截器**:Struts2.0使用拦截器来处理请求,拦截器链可以在不修改Action代码的情况下添加新的功能,如日志、事务管理等。 4. **OGNL表达式语言**:Struts2.0使用OGNL(Object-Graph Navigation Language)作为...
2. **拦截器(Interceptors)**: Struts 2.0引入了拦截器机制,类似于AOP(面向切面编程)的概念,可以实现如日志记录、事务管理、权限控制等功能。开发者可以自定义拦截器,并将其链式地配置在Action执行路径上,...
Struts2.0框架整合了多种开源项目,如FreeMarker或JSP作为视图技术,OGNL(Object-Graph Navigation Language)作为表达式语言,以及拦截器机制来处理请求。框架的核心部分包括Action类,它是业务逻辑的载体;配置文件...
拦截器是Struts 2.0的一个核心特性,它们在Action执行前后执行,可以用于日志记录、权限验证、数据校验等。开发者可以通过自定义拦截器扩展框架功能。 6. **OGNL(Object-Graph Navigation Language)** Struts ...
Struts2.0是Java Web开发中一个非常重要的框架,它是Apache软件基金会的Jakarta项目下的一个开源产品,主要用于构建MVC(Model-View-Controller)模式的应用程序。本入门案例将带你逐步了解如何使用Struts2.0来创建...