Token的使用方法
使用Token可以防止当用户刷新页面和点击后退按钮时造成的页面表单重复提交的问题:
使用方法如下:
㈠
首先要通过一个页面生成一个Token令牌,生成一个随机数
可以创建一个页面main.jsp
然后在该页面上放置一个按钮或者超连接 ,该超连接指向一个action类
在这个action类中使用
this.saveToken(request); //生成Token
Globals s;
return mapping.findForward("success"); //跳转到增加页面
㈡
在--增加页面--中导入如下两个jar包
<%@ page import="org.apache.struts.taglib.html.Constants" %>
<%@ page import="org.apache.struts.Globals" %>
然后在页面上添加一个隐藏域
<input type="hidden" name="<%=Constants.TOKEN_KEY%>" value="<%=session.getAttribute(Globals.TRANSACTION_TOKEN_KEY)%>"/>
此处的name value中的值都是固定的,不允许改变
㈢
在---AddUserAction-----中,使用isTokenValid(request)验证Token,如果产生的Token令牌随机数不同,则
跳转到错误页面,如果相同则把session中的Token删除,然后进行业务处理
if (!this.isTokenValid(request)) {
return mapping.findForward("error");
}
this.resetToken(request);//则该页面只能提交一次(无论刷新或手动提交)
或 this.saveToken(request); //则该页面可以(多次手动提交,刷新不会提交)
//之后跟业务代码
注意:
Hidden的名称必须为Constants.TOKEN_KEY
Hidden的值必须为session.getAttribute(Globals.TRANSACTION_TOKEN_KEY)
思路如下:
1.在前置action中, 在session中保存一个变量A
2.在页面 的request中,也保存一个B 赋值为A的值
3.第一次提交时 A equels B 则必相等,此时 重置A的值 并跳转至上传页面
4. 同2 ,如果手动提交,无影响可以继续上传
5.如果用户手动刷新页面,则 此时不会走页面,直接后台的ACTION (request是不变的)
此时A equels B ==false 跳转至error页面即可
分享到:
相关推荐
下面将详细阐述Struts2中Token机制的工作原理、配置以及使用方法。 1. Token机制概述: Token机制是通过在客户端(浏览器)和服务器之间传递一个唯一的标识符(Token)来防止表单的重复提交。当用户首次提交表单时...
在此,我们将深入探讨Struts1.x令牌的使用方法及其背后的原理。 首先,理解为何需要令牌。在Web应用中,用户可能会意外或恶意地多次点击提交按钮,导致服务器接收到重复的请求,这可能对业务逻辑产生严重影响。另一...
3. **验证Token:** 在处理表单提交的Action方法中,Struts2的Token拦截器会自动进行Token验证。如果验证失败(比如因为用户刷新页面),拦截器会抛出一个`TokenException`,你可以捕获这个异常并处理。 ```java ...
如果Token已经使用过或者不存在于session中,那么`isTokenValid()`会返回`false`,此时可以抛出异常或者返回一个错误页面,提示用户重新尝试。 6. **清理Token**: 提交成功后,记得从session中移除Token,防止...
2. **创建Action**: 在Action类中,可以重写`supports()`方法来决定哪些方法需要Token验证,或者直接在方法上使用`@TokenCheck`注解。 ```java public class MyAction extends ActionSupport { @Override public ...
### 解决Struts中通过Token防止重复提交的问题 在Web应用程序开发中,特别是基于MVC架构的框架如Apache Struts中,确保用户操作的安全性是非常重要的。其中一项常见且重要的安全措施是防止表单的重复提交。本文将...
### 使用Struts Token机制解决表单重复提交 #### 一、引言 在Web应用程序开发过程中,表单重复提交是一个常见的问题。用户可能因为网络延迟、浏览器缓存等原因导致重复点击提交按钮,进而向服务器发送多个相同的...
5. Token清理:成功处理请求后,服务器从会话中移除该Token,确保它不能再次被使用。 三、Struts1.2中的Token实现 在Struts1.2中,Token机制是通过`org.apache.struts.action.TokenAction`类实现的。这个类提供了...
#### 一、使用方法 为了有效地防止Web应用程序中的表单重复提交问题,Struts框架提供了一种简单而强大的解决方案——同步令牌模式(Synchronization Token Pattern, STP)。下面详细介绍如何在Struts项目中实现这一...
然后在JSP中使用: ```jsp <s:select label="选择项" name="selectedItem" list="#action.fromArray" /> ``` 通过这种方式,你可以根据业务需求灵活构建和定制下拉列表。 总之,Struts2标签库提供了丰富的功能,...
这个"struts2 令牌使用例子"是一个很好的实践教程,帮助开发者理解如何在实际应用中实施这一安全策略。 首先,我们需要了解什么是CSRF攻击。这种攻击方式是恶意用户通过欺骗受害者的浏览器发送一个非本意的请求到...
- `s:token`标签必须与`<s:form>`标签一起使用,因为Struts2的拦截器通常只在表单提交时起作用。 - 如果你使用的是GET方法,记得设置`<s:form method="get">`,因为默认是POST方法。 - 在实际应用中,可能还需要结合...
以下是在Struts中使用令牌的代码片段: ```java if (isTokenValid(request, true)) { // 处理请求,然后更新令牌 return mapping.findForward("success"); } else { saveToken(request); return mapping....
通过阅读这两个资源,开发者可以全面了解Struts2框架,掌握其核心概念和使用方法,从而在实际项目中发挥出Struts2的强大功能。在学习过程中,结合实际练习,将理论知识转化为实际技能,是成为一名熟练的Struts2...
3. **插入表单**:在JSP页面中,使用`s:token`标签将令牌插入到HTML表单中。 ```jsp <s:form action="save"> <s:textfield name="name"/> <s:submit/> <s:token/> </s:form> ``` 4. **验证令牌**:当用户...
<%@ taglib prefix="s" uri="/struts-tags" %> 就能使用struts2.0的标签库 下面就介绍每个标签的具体应用实例说明:按字母排列 A: 1. 2. <s:a href=""></s:a>-----超链接,类似于html里的<a></a> 3. <s:...
在Struts2中,可以使用`token`标签生成一个唯一的令牌,并在表单提交时验证: ```html <s:form action="uploadImage.action"> <s:token/> <s:file name="image" label="选择图片"/> <s:submit value="上传"/> ...
此标签类似于Struts1中的JavaBean引用,但在Struts2中并不常用,因为Struts2更倾向于使用Action来处理业务逻辑。 C. `<s:checkbox>`, `<s:checkboxlist>`, `<s:combobox>`, `<s:component>`: 这些标签用于创建复选...
在Struts2框架中,防止重复提交是一个重要的安全性考量,因为重复提交可能导致数据不一致性和资源浪费。在上述描述中,给出了三种主要方法来解决这个问题: 1) **使用 `<s:token>` 标签** Struts2 提供了一个称为 ...