java 后退防止重复提交
来源:互联网 发布:哪儿有淘宝号出售 编辑:程序博客网 时间:2024/05/19 00:08
转载来源:http://blog.csdn.net/u011410116/article/details/35989151
WAP商城订单重复提交解决方法,步骤:
1.javascript脚本控制法:提交按钮提交之后变为不可用状态(此步骤掩人耳目,只是对不懂技术的人而言能起一点作用)
2.令牌控制法:在跳转到订单提交按钮的页面时,给页面添加一个唯一值,在订单提交过程中,确认这个唯一值是否已经用过(这样当第一次提交时会认为没有提交过,后来重复提交的订单执行到这一步会跳出)
此处为第二种方法,以下是代码:
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.util.Random;
- import javax.servlet.http.HttpServletRequest;
- import sun.misc.BASE64Encoder;
- /**
- * @description: 令牌处理,防止重复提交
- * @author: shaojie
- * @date: 2014-5-21 下午02:32:49
- * @version: 1.0
- */
- public class TokenProcessor {
- /**
- * 生成一个令牌
- * @return String
- */
- public String generateToken() {
- String token=System.currentTimeMillis()+new Random().nextInt()+“”;
- try {
- MessageDigest md=MessageDigest.getInstance(”md5”);
- byte[] md5=md.digest(token.getBytes());
- //base64编码
- BASE64Encoder encoder=new BASE64Encoder();
- return encoder.encode(md5);
- } catch (NoSuchAlgorithmException e) {
- // TODO Auto-generated catch block
- throw new RuntimeException(e);
- }
- }
- /**
- * 管理令牌
- * @param request
- * @param mType 管理类型 p:存放 d:删除
- * @param void
- */
- public void managerToken(HttpServletRequest request,String mType){
- if(“p”.equals(mType)){
- //产生随机数
- String token=generateToken();
- request.getSession().setAttribute(”token”, token);
- }else if(“d”.equals(mType)){
- request.getSession().removeAttribute(”token”);
- }
- }
- /**
- * 令牌是否验证通过
- * @param request
- * @return boolean
- */
- public boolean isTokenValid(HttpServletRequest request) {
- String client_token = request.getParameter(”token”);
- if (client_token == null) {
- return false;
- }
- String server_token = (String) request.getSession().getAttribute(”token”);
- if (server_token == null) {
- return false;
- }
- if (!client_token.equals(server_token)) {
- return false;
- }
- return true;
- }
- }
import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Random;import javax.servlet.http.HttpServletRequest;import sun.misc.BASE64Encoder;/** * @description: 令牌处理,防止重复提交 * @author: shaojie * @date: 2014-5-21 下午02:32:49 * @version: 1.0 */public class TokenProcessor { /** * 生成一个令牌 * @return String */ public String generateToken() { String token=System.currentTimeMillis()+new Random().nextInt()+""; try { MessageDigest md=MessageDigest.getInstance("md5"); byte[] md5=md.digest(token.getBytes()); //base64编码 BASE64Encoder encoder=new BASE64Encoder(); return encoder.encode(md5); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block throw new RuntimeException(e); } } /** * 管理令牌 * @param request * @param mType 管理类型 p:存放 d:删除 * @param void */ public void managerToken(HttpServletRequest request,String mType){ if("p".equals(mType)){ //产生随机数 String token=generateToken(); request.getSession().setAttribute("token", token); }else if("d".equals(mType)){ request.getSession().removeAttribute("token"); } } /** * 令牌是否验证通过 * @param request * @return boolean */ public boolean isTokenValid(HttpServletRequest request) { String client_token = request.getParameter("token"); if (client_token == null) { return false; } String server_token = (String) request.getSession().getAttribute("token"); if (server_token == null) { return false; } if (!client_token.equals(server_token)) { return false; } return true; } }
然后在适当的位置存放令牌
- token.managerToken(request, “p”);//存放令牌
token.managerToken(request, "p");//存放令牌
然后提交订单时删除对应的令牌存放值
- if(!token.isTokenValid(request)){
- logger.info(”重复提交,phoneNo:”+phoneNo);
- request.setAttribute(Constant.RETURNMSG, ”不能重复提交同一订单”);
- return checkresult;
- }
- token.managerToken(request, ”d”);//删除令牌
if(!token.isTokenValid(request)){ logger.info("重复提交,phoneNo:"+phoneNo); request.setAttribute(Constant.RETURNMSG, "不能重复提交同一订单"); return checkresult; } token.managerToken(request, "d");//删除令牌
阅读全文
0 0
- java 后退防止重复提交
- java防止表单重复提交后退等
- struts2 防止后退重复提交
- 如何防止用户后退重复提交表单?
- 防止页面重复提交及后退方法
- 防止用户后退重复提交表单
- 如何防止用户后退重复提交表单
- JAVA中Struts重复提交、重复刷新、防止后退的问题以及处理方式
- java 防止重复提交
- java防止重复提交
- JavaWeb防止重复提交,重复刷新和后退
- 防止页面重复刷新、重复提交、后退的解决方案
- 防止刷新/后退引起的重复提交问题的Java Token代码,非Struts
- jsp/servlet防止刷新/后退引起的重复提交问题的Java Token代码
- 防止刷新/后退引起的重复提交问题的Java Token代码
- 防止刷新/后退引起的重复提交问题的Java Token代码,非Struts
- <转>防止刷新/后退引起的重复提交问题的Java Token代码,非Struts
- <转>,防止刷新/后退引起的重复提交问题的Java Token代码,非Struts
- java实现逆波兰式
- Etnercat分布时钟详解
- Gradle for Android 第一篇( 从 Gradle 和 AS 开始 )
- OpenGL三维坐标显示
- Linux命令
- java 后退防止重复提交
- docker退出
- 《JavaScript+DOM编程艺术》笔记
- 建造者模式(builder pattern)
- java中常用的流
- windows bat脚本 脚本实现复制工程文件到客户电脑,安装tomcat服务,还原mysql数据库文件,实现一键启动网页工程
- 10月英语总结
- 浅析回调机制,这是一篇骚骚的文章
- 【SSH进阶之路】Spring的AOP逐层深入——AOP的基本原理