Token(解决重复提交的问题)
2014-07-07 13:30
330 查看
Token主要是以一种指令牌的形式进行重复提交处理的,在很多情况下,如果用户对同一个表单进行了多次提交,则有可能造成数据的混乱,此时,Web服务器必须可以对这种重复提交的行为作出处理。
设置Token就是向session中保存一个属性,而判断Token就是从session中取出属性对内容进行验证,如果验证成功,则正常操作,如果验证失败,则进行错误处理。
Token操作的相关方法
例:使用Token完成一个用户输入数据的操作
编写首页,给出连接,并获得Token----index.jsp
设置Token就是向session中保存一个属性,而判断Token就是从session中取出属性对内容进行验证,如果验证成功,则正常操作,如果验证失败,则进行错误处理。
Token操作的相关方法
NO. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | protected boolean isTokenValid(HttpServletRequest request) | 普通 | 判断Token是否存在,如果存在则返回true,如果不存在则返回false |
2 | protected void saveToken(HttpServletRequest request) | 普通 | 设置Token |
3 | protected void resetToken(HttpServletRequest request) | 普通 | 删除Token |
编写首页,给出连接,并获得Token----index.jsp
<%@ page language="java" pageEncoding="GBK"%> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%> <html:html lang="true"> <head> <html:base /> <title>hello.jsp</title> </head> <body> <h3><a href="tokenforward.do">获取Token,输入数据</a></h3> </body> </html:html>编写ActionForm----TokenforwardForm.java
package org.lxh.struts.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class TokenforwardForm extends ActionForm { public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { return null; } public void reset(ActionMapping mapping, HttpServletRequest request) { } }编写Action----TokenforwardAction.java
package org.lxh.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.lxh.struts.form.TokenforwardForm; public class TokenforwardAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { super.saveToken(request) ; // 表示的是设置了一个token return mapping.findForward("input"); } }编写输入数据页面------input.jsp
<%@ page language="java" pageEncoding="GBK"%> <%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%> <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%> <%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%> <%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%> <html:html lang="true"> <head> <html:base /> <title>hello.jsp</title> </head> <body> <html:errors/> <html:form action="input.do" method="post"> 请输入信息:<html:text property="info"></html:text> <html:submit value="显示"></html:submit> </html:form> </body> </html:html>编写输入数据的ActionForm----InputForm.java
package org.lxh.struts.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class InputForm extends ActionForm { private String info; public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { return null; } public void reset(ActionMapping mapping, HttpServletRequest request) { } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } }定义接收输入数据的Action----InputAction.java
package org.lxh.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; import org.apache.struts.action.ActionMessages; import org.lxh.struts.form.InputForm; public class InputAction extends Action { public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { InputForm inputForm = (InputForm) form; if (super.isTokenValid(request)) { // 如果设置的Token正确,则进行操作 System.out.println("输入内容:" + inputForm.getInfo()); super.resetToken(request);// 取消设置的Token } else { // Token不正确 ActionMessages errors = new ActionMessages(); errors.add("token", new ActionMessage("error.token")); super.saveErrors(request, errors); return mapping.getInputForward(); } return null; } }修改struts-config.xml配置文件
<struts-config> <form-beans> <form-bean name="tokenforwardForm" type="org.lxh.struts.form.TokenforwardForm" /> <form-bean name="inputForm" type="org.lxh.struts.form.InputForm" /> </form-beans> <global-exceptions /> <global-forwards /> <action-mappings> <action attribute="tokenforwardForm" input="/form/tokenforward.jsp" name="tokenforwardForm" path="/tokenforward" scope="request" type="org.lxh.struts.action.TokenforwardAction"> <forward name="input" path="/input.jsp"></forward> </action> <action attribute="inputForm" input="/input.jsp" name="inputForm" path="/input" scope="request" type="org.lxh.struts.action.InputAction" /> </action-mappings> <message-resources parameter="org.lxh.struts.ApplicationResources" /> </struts-config>编写资源文件,添加错误信息----ApplicationResources.properties
#请不要重复提交 error.token = \u8bf7\u4e0d\u8981\u91cd\u590d\u63d0\u4ea4\uff01
相关文章推荐
- Struts的Token(令牌)机制解决表单重复提交的问题
- html+springMVC的拦截器token配置--解决ajax表单重复提交的问题
- Struts中利用同步令牌(Token)解决重复提交的问题
- STRUTS中利用同步令牌(Token)解决重复提交的问题(转载)
- 利用Token机制解决重复重复提交问题
- Struts的Token(令牌)机制解决表单重复提交的问题
- 在页面中使用WebWork的token标签解决表单重复提交问题
- 利用struts的Token机制解决重复提交问题的分析
- struts分发action下用Token解决重复提交问题
- Struts2解决重复提交问题(Token)
- struts中的Token(令牌)解决重复提交问题
- 在页面中使用WebWork的token标签解决表单重复提交问题
- 使用Struts的Token机制解决表单的重复提交
- sturts学习系列2:Struts的请求重复提交的解决之道--Token(令牌)
- SubmitOncePage:解决刷新页面造成的数据重复提交问题
- SubmitOncePage:解决刷新页面造成的数据重复提交问题
- 使用Struts的Token机制解决表单的重复提交
- 使用Struts的Token机制解决表单的重复提交
- asp.net 解决重复提交问题
- 使用Struts的Token机制解决表单的重复提交