重复提交 token的应用
来源:互联网 发布:云计算售前面试题 编辑:程序博客网 时间:2024/06/05 00:21
.新建PrepareInsertAction.java,InsertAction.java,InsertForm.java:
PrepareInsertAction.java:
public class PrepareInsertAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// 创建一个新的令牌
this.saveToken(request);
return new ActionForward("/insert.jsp");
}
}
InsertAction.java:
public class InsertAction extends Action{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
InsertForm insertForm = (InsertForm) form;
//32位的随机码 可以判断前后两次提交是否相等 即: isTokenValid(request)
System.out.println(request.getParameter("org.apache.struts.taglib.html.TOKEN"));
//判断当前用户session范围内的令牌值和请求参数中的令牌值是否相等
if(!isTokenValid(request)){//如果两个值相等,即表单重复提交
this.saveToken(request);
return new ActionForward("/insert.jsp");
}else{//当用户首次提交时返!isTokenValid()返回true
this.resetToken(request);//将用户session中的token清空
}
return null;
}
}
InsertForm.java:
public class InsertForm extends ActionForm{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.配置struts-config.xml:
<form-beans>
<form-bean name="insertForm"
type="com.and4walker.struts.form.InsertForm" />
</form-beans>
<action-mappings>
<action attribute="insertForm" input="/insert.jsp" name="insertForm"
path="/insert" scope="request"
type="com.and4walker.struts.action.InsertAction" />
<action path="/prepareInsert"
type="com.and4walker.struts.action.PrepareInsertAction" />
</action-mappings>
3.建立index.jsp跟insert.jsp:
index.jsp:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<html>
<body>
先事先保存一个tokenid<br/>
<html:link action="prepareInsert">insert</html:link>
</body>
</html>
insert.jsp:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html"%>
<html>
<body>
<html:form action="/insert">
内容:<html:text property="name"/><br/>
<html:submit value="提交"/>
</html:form>
</body>
</html>
原理:服务器端在处理到达的请求之前,会将请求中包含的令牌值与保存在当前用户会话中的令牌值进行比较,看是否匹配。在处理完该请求后,且在答复发送给客户端之前,将会产生一个新的令牌,该令牌除传给客户端以外,也会将用户会话中保存的旧的令牌进行替换。这样如果用户回退到刚才的提交页面并再次提交的话,客户端传过来的令牌就和服务器端的令牌不一致,从而有效地防止了重复提交的发生。
第一:你需要在请求中有这个令牌值,请求中的令牌值如何保存,其实就和我们平时在页面中保存一些信息是一样的,通过隐藏字段来保存,保存的形式如: 〈input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="6aa35341f25184fd996c4c918255c3ae"〉,这个value是TokenProcessor类中的generateToken()获得的,是根据当前用户的session id和当前时间的long值来计算的。第二:在客户端提交后,我们要根据判断在请求中包含的值是否和服务器的令牌一致,因为服务器每次提交都会生成新的Token,所以,如果是重复提交,客户端的Token值和服务器端的Token值就会不一致。下面就以在数据库中插入一条数据来说明如何防止重复提交。
- 重复提交 token的应用
- asp.net页面的重复提交 !! token
- Token(解决重复提交的问题)
- structs2 防止表单的重复提交token
- Token注解防止表单的重复提交
- 防止重复提交token
- token防重复提交
- struts2 token 防止重复提交
- Struts2 token 重复提交问题
- token 防止页面重复提交
- Struts2 避免重复提交 [Token]
- java token 重复提交解决
- token防止表单重复提交
- Struts2 token 重复提交问题
- s:token-防止重复提交
- token-防止表单重复提交
- 使用Struts的Token机制解决表单的重复提交
- 使用Struts的Token机制解决表单的重复提交
- 【百科】中药指纹图谱研究是什么
- setTransactionIsolation
- 归纳一下:C#线程同步的几种方法
- 2010-03-20
- 自己写的平面柱状图,有个小bug
- 重复提交 token的应用
- CSS的优先级
- 关于山下智久
- Integer Inquiry hdu1047 java 处理大数
- 安装Linux下的Oracle
- 关于JAVA 1.5中对于泛型(参数化类型)的简单说明
- 中药指纹图谱学体系在中药创制中的作用
- 女朋友过生日,送什么礼物最好,要可以永远留在身边的,也要随时可以看的见的。
- 安装MySQL并且修改密码