1,先在一个Action中,调用saveToken(HttpServletRequest request)方法。然后转向带有表单的JSP页面。
2,在JSP页面提交表单给一个Action,再这个Action中进行是否为重复提交的判断。
if (isTokenValid(request, true)) {
// 未重复提交时,正确的时候应该做的事情
return mapping.findForward("success");
} else {
// 重复提交时,需要做的事情
saveToken(request);
return mapping.findForward("error");
}
Struts Token 机制:
1, 由第一个Action调用saveToken(HttpServletRequest request),这个方法内部实现如下:
protected void saveToken(HttpServletRequest request) {
token.saveToken(request);
}
token.saveToken(request);这个方法的实现如下:
public synchronized void saveToken(HttpServletRequest request) {
HttpSession session = request.getSession();
String token = generateToken(request);
if (token != null) {
session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);
}
}
这个方法调用generateToken方法实现如下:
public synchronized void saveToken(HttpServletRequest request) {
HttpSession session = request.getSession();
String token = generateToken(request);
if (token != null) {
session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);
}
}
generateToken完毕后,将得到的唯一值setAttribute到session中。
session.setAttribute(Globals.TRANSACTION_TOKEN_KEY, token);
Globals.TRANSACTION_TOKEN_KEY的值是:” org.apache.struts.action.TOKEN”
然后跳转到JSP页面。
2, JSP页面的Struts自定义标签 的标签类:org.apache.struts.taglib.html. FormTag
这个类的doStartTag()方法会调用本类的renderToken()方法。
protected String renderToken() {
StringBuffer results = new StringBuffer();
HttpSession session = pageContext.getSession();
if (session != null) {
String token =(String) session.getAttribute(Globals.TRANSACTION_TOKEN_KEY);
if (token != null) {
results.append("
的隐藏标签。
然后提交到一个Action中,在Action中用isTokenValid()方法进行比较session中” org.apache.struts.action.TOKEN”的这个key所对应的值和提交来的request中的” org.apache.struts.action.TOKEN”的这个value是否一致。
如果为true,那么证明可以提交。如果为false,证明已经重复,不允许提交。
发表评论
-
String和InputStream的转换
2014-04-03 21:24 530String和InputStream的转换 1 ... -
JS暴虐查找
2014-03-18 16:40 585function JS_cruel_search(data, ... -
编码规范
2013-03-19 19:11 1129最近买了一本书《深入分析JavaWeb技术内幕》 学 ... -
[转]CAS原理
2012-10-16 16:49 1170在JDK 5之前Java语言是 ... -
关于V8 JavaScript Engine的使用方法研究(转)
2011-07-05 15:52 8033一、写在前面的话 随 ... -
javascript内置对象Array中删除元素
2011-05-30 17:43 1408在javascript中,Array对象没有提供 ... -
window.showModalDialog和window.open关闭子页面时刷新父页面 IE7,IE8
2011-05-18 11:29 3998if(true){ ... -
能动态加载js的方法
2011-04-21 16:16 822//加载新的js function _GetJsDat ... -
Shapefile格式说明及读写代码示例
2011-04-18 16:24 1901Shapefile格式说明及读写代码示例 ESR ... -
JavaScript王者归来
2011-02-26 13:39 1327内容简介回到顶部↑ 你手中的这本《javascr ... -
oracle更改用户名后 OracleDBConsole不能启动
2010-12-20 10:31 1187更改机器名后重新配置oracle数据库参数 在命令行输入 ... -
<ww:select 标签只读
2010-06-17 12:00 2060struts2中如何使s:select标签只读 在开发op ... -
URL记录
2010-03-29 20:08 766http://blog.qq.com/qzone/622 ... -
Java 泛型的理解与等价实现
2009-12-17 10:54 717Java 泛型的理解与等价 ... -
软件行业规范化势在必行
2009-05-24 14:20 1128http://blog.csai.cn/user1/21567 ... -
MD5加密
2009-05-17 18:22 1134import java.io.IOException;i ... -
CVS权限设置
2009-05-08 11:22 1423不同用户设置不同的访问权限方法 ... -
转载http://blog.csdn.net/xidor/archive/2008/03/20/22
2009-04-21 20:50 1179// JavaScript Document /**//** ... -
java学习网站
2009-03-18 10:08 1250http://www.open-open.com/ http ... -
从“表内”,“表外”说起,商业银行业务学习(一)
2009-02-28 11:43 1410今天胡里胡涂又做了几张报表,忽然想起一年前也是在做类似的报表, ...
相关推荐
### Struts Token机制防止页面刷新及重复提交 在Web应用开发过程中,特别是在使用MVC框架如Apache Struts进行开发时,防止表单重复提交是一个重要的安全措施。表单重复提交通常发生在用户点击“提交”按钮后,由于...
总之,Struts Token Dozer实例展示了如何在Java Web开发中结合使用Struts的安全特性与Dozer的映射功能,以提高应用的安全性和代码效率。通过深入理解这两个组件的工作原理和它们的结合使用,开发者可以构建出更健壮...
总的来说,Struts Token机制通过维护一个临时的、一次性使用的Token,有效地解决了Web应用中的表单重复提交问题,提高了系统的稳定性和安全性。在实际开发中,应根据项目需求灵活运用并优化此机制。
在Web表单提交中,防止重复提交是一个常见的需求,而Struts2的Token机制就是为了应对这一问题而设计的。Token机制能确保用户只能提交一次表单,避免了由于网络延迟或误操作导致的重复数据录入。 ### 一、Token机制...
在Struts框架中,Token机制是一个重要的安全特性,用于防止重复提交(Double Submit)和跨页请求伪造(Cross-Site Request Forgery, CSRF)攻击。下面将详细解释Struts Token的工作原理、应用场景以及如何在实际项目...
在JavaEE应用开发中,Struts2框架是一个广泛使用的MVC框架,它提供了一种有效的方式来组织和控制应用程序的行为。然而,随着Web应用的发展,防止重复提交成为一个重要的问题,尤其是在处理金融交易、投票等关键操作...
下面将详细阐述Struts2中Token机制的工作原理、配置以及使用方法。 1. Token机制概述: Token机制是通过在客户端(浏览器)和服务器之间传递一个唯一的标识符(Token)来防止表单的重复提交。当用户首次提交表单时...
Struts2 Token回退刷新是一种防止重复提交的安全机制,尤其在处理并发操作和防止 CSRF(跨站请求伪造)攻击时显得尤为重要。Struts2框架提供了一种令牌验证的方式来确保每个表单提交是唯一的,避免了恶意用户通过...
3. **验证Token:** 在处理表单提交的Action方法中,Struts2的Token拦截器会自动进行Token验证。如果验证失败(比如因为用户刷新页面),拦截器会抛出一个`TokenException`,你可以捕获这个异常并处理。 ```java ...
Struts1.x是一个非常经典的Java Web开发框架,它在企业级应用中被广泛使用。而Struts1.x的令牌机制(Token)则是防止重复提交、跨页请求攻击的重要手段。在此,我们将深入探讨Struts1.x令牌的使用方法及其背后的原理...
在你提供的压缩包文件"token"中,可能包含了一个简单的Struts2令牌实例,你可以通过查看源代码学习如何在实际项目中集成和使用令牌机制。学习和理解这个实例,将有助于你更好地理解和应用Struts2的令牌功能。
以下是使用Struts实现Token机制的详细步骤: 1. **配置Struts2拦截器**: 首先,我们需要在Struts2的配置文件(struts.xml)中添加Token拦截器。这个拦截器会处理Token的生成和验证过程。例如: ```xml ...
在Struts框架中,令牌机制(Token)是一种防止重复提交的有效方法,它主要用于处理表单数据的并发控制,防止用户意外或者恶意地多次提交表单,从而确保数据的一致性和安全性。 在Web应用中,用户可能会因为网络延迟...
以下是对Struts1.x中使用Token防止提交的详细说明: 1. **理解Token机制**: Token机制的核心思想是在客户端和服务器之间建立一种绑定关系,每个提交请求都必须携带一个服务器生成并已存储的唯一令牌。如果令牌...
为了解决这个问题,Struts提供了一个名为“Token”的机制。 **一、Struts Token机制** Struts的Token机制主要用来防止用户意外或恶意的多次提交表单,例如在刷新页面时重复提交数据。它的工作原理如下: 1. **...
Struts的Token机制是Web应用中防止表单重复提交的一种常用方法。在处理表单提交时,如果用户意外地多次点击了提交按钮,可能会导致数据的重复录入,从而引起不必要的问题,例如订单重复、数据库数据异常等。为了解决...
在Struts的配置文件中定义一个Token拦截器,拦截所有需要防止重复提交的Action,然后在拦截器中实现Token的验证逻辑。 通过这种方式,Struts+Token机制可以有效地防止由于用户误操作或者网络延迟造成的表单重复提交...
### 使用Struts Token机制解决表单重复提交 #### 一、引言 在Web应用程序开发过程中,表单重复提交是一个常见的问题。用户可能因为网络延迟、浏览器缓存等原因导致重复点击提交按钮,进而向服务器发送多个相同的...
<input type="hidden" name="struts.token" value="<s:property value="#session.token"/>" /> ``` 4. **验证Token** 在Action的`execute()`方法中,首先检查Token是否有效。如果Token已经存在于会话中并且与...
### 解决Struts中通过Token防止重复提交的问题 在Web应用程序开发中,特别是基于MVC架构的框架如Apache Struts中,确保用户操作的安全性是非常重要的。其中一项常见且重要的安全措施是防止表单的重复提交。本文将...