`

防表单重复提交

    博客分类:
  • Java
 
阅读更多

 

<script type="text/javascript">

var isCommited = false;

function chechPost(){

if (!isCommited){

isCommited = true;

return true;

}else{

alert("You can not submit again");

return false;

}

}

document.ondblclick = function docondblclick() { window.event.returnValue = false; } document.onclick = function doconclick() { if (isCommited) { window.event.returnValue = false; } }

</script>

不足:当用户单击”刷新”,或单击”后退”再次提交表单,将导致表单重复提交。故还需后台程

序防止表单重复提交

 

FormServlet

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

response.setCharacterEncoding("utf-8");

response.setContentType("text/html; charset=utf-8");

request.setCharacterEncoding("utf-8");

PrintWriter writer = response.getWriter();

//防止表单重复提交

String token = request.getParameter("token");

HttpSession session = request.getSession();

String tokeninsession = (String) session.getAttribute("token");

if(token==null) { response.sendRedirect("/day07/servlet/FormServlet1"); return; }

if(tokeninsession==null) {response.sendRedirect("/day07/servlet/FormServlet1"); return;}

if(!token.equals(tokeninsession)) {

response.sendRedirect("/day07/servlet/FormServlet1");

return;

}

session.setAttribute("token", null);

}

 

 

FormServlet1

public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

response.setCharacterEncoding("utf-8");

response.setContentType("text/html; charset=utf-8");

request.setCharacterEncoding("utf-8");

PrintWriter writer = response.getWriter();

String token = TokenProcessor.getInstance().makeToken();

request.getSession().setAttribute("token", token);

writer.write("<form action='/day07/servlet/FormServlet' method='post'>");

writer.write(" 用户名: <input type='text' name='username'><br>");

writer.write(" 密码: <input type='password' name='password'><br>");

writer.write("<input type='hidden' name='token' value='"+token+"'><br>"); // 令牌

writer.write("<input type='submit' value=' 登陆'>");

writer.write("</form>");

}

 

public class TokenProcessor { //工具类,产生随机令牌

//单例模式,私有的构造方法、提供私有变量记住实例、提供方法返回实例

private TokenProcessor(){}

private static TokenProcessor instance = new TokenProcessor();

public static TokenProcessor getInstance() { return instance; }

public String makeToken() {//产生令牌

//产生一个随机数 222332343434324234 3333 1 343242423

String token = System.currentTimeMillis() + new Random().nextInt(1999999) + "";

try { //数据指纹 md5 算法

MessageDigest md = MessageDigest.getInstance("md5");

byte[] md5 = md.digest(token.getBytes());

//base64算法 将3个字节转成4个字节

BASE64Encoder encoder = new BASE64Encoder();

String data = encoder.encode(md5);

return data;

} catch (NoSuchAlgorithmException e) {

throw new RuntimeException(e);

}

}

}

 

参考: http://mikzhang.iteye.com/blog/2043768

分享到:
评论

相关推荐

    springboot2.1+redis+拦截器 防止表单重复提交

    在现代Web应用开发中,防止表单重复提交是一项重要的任务,因为这可能导致数据不一致性和服务器资源浪费。本文将深入探讨如何使用Spring Boot 2.1、Redis和拦截器来实现这一功能。以下是对这个主题的详细解释: ...

    javascript方式防止表单重复提交

    在Web开发中,表单重复提交是一个常见的问题,可能导致数据的冗余或错误。JavaScript作为客户端脚本语言,可以通过多种策略来防止用户意外或恶意地多次提交表单。以下是一些关键的知识点: 1. **禁用提交按钮**:最...

    防止表单重复提交

    本篇文章将深入探讨如何防止表单重复提交,主要关注于基于Struts2框架的解决方案。 首先,理解表单重复提交的原因。用户在点击提交按钮后,如果网络延迟或用户误操作导致页面刷新或再次点击提交,就可能发生重复...

    防止表单重复提交(asp.net )

    为了确保用户在提交表单时不会无意或有意地多次发送请求,我们需要实施有效的防止表单重复提交的策略。以下是一些关键知识点: 1. **表单重复提交的类型**: - **用户行为**:用户可能意外按下刷新按钮,导致已...

    防止表单重复提交的方法(简单的token方式)

    防止表单重复提交的方法(简单的token方式),内附实现代码及实现思路。

    客户端防表单重复提交和服务器端session防表单重复提交实用.pdf

    总的来说,防止表单重复提交需要客户端和服务器端的双重防护。客户端的防护提供了一定程度的用户体验优化,而服务器端的防护确保了即使在客户端防护被绕过的情况下,也能防止恶意的重复提交。在实际应用中,根据项目...

    thinkphp3.2 防止表单重复提交

    在Web开发中,防止表单重复提交是一个重要的问题,它能确保用户操作的唯一性和数据的一致性。ThinkPHP 3.2 是一个基于MVC模式的PHP开发框架,提供了丰富的功能来帮助开发者构建安全、高效的应用。在这个场景中,我们...

    提交表单后提交禁用提交按钮,防止重复提交

    提交表单后提交禁用提交按钮,防止重复提交.

    自定义注解解决API接口幂等设计防止表单重复提交(生成token存放到redis中)

    为了解决这一问题,我们可以采用自定义注解结合Redis来实现一个防止表单重复提交的解决方案。 首先,让我们理解自定义注解的核心思想。注解是一种元数据,它提供了在代码中添加信息的方式,这些信息可以被编译器或...

    防止Layui form表单重复提交的实现方法

    下面详细解释几种防止Layui表单重复提交的方法。 首先,在HTML表单中,为了避免在提交时页面刷新导致的重复提交,可以在标签中使用onsubmit="return false;"属性。这个属性的作用是在表单提交时返回false,阻止...

    浅谈利用Session防止表单重复提交

    浅谈利用Session防止表单重复提交 Session是Web应用程序中的一种机制,用于存储用户的会话信息。在Web应用程序中,表单重复提交是一个常见的问题,可能会导致数据库中产生冗余数据,浪费数据库资源。利用Session...

    springboot+redis+AOP 防止表单重复提交

    AOP是面向切面编程,允许开发者定义“切面”,这些切面可以封装跨越多个对象的行为,如日志记录、事务管理或,就像在这个场景中,防止表单重复提交。AOP的核心概念是“切点”(Pointcut)和“通知”(Advice)。切点...

    struts2防止表单重复提交--重定向

    下面将详细解释Struts2如何通过重定向来防止表单重复提交。 首先,理解表单重复提交的场景:用户在提交表单后,由于网络延迟或其他原因,可能会无意中多次点击提交按钮。如果服务器没有处理这些重复请求,那么相同...

    spring boot 防止重复提交实现方法详解

    Spring Boot 防止重复提交是指在用户提交表单或请求时,防止同一客户端在短时间内对同一 URL 的重复提交,从而避免服务器端的处理压力和数据的一致性问题。下面将详细介绍 Spring Boot 防止重复提交实现方法的相关...

    几种防止表单重复提交的方法

    几种防止表单重复提交的方法 禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。 我之前的文章曾说...

    struts2利用token防止表单重复提交(源代码)

    struts2防止表单重复提交,利用struts的拦截器tokenSession,轻轻松松解决表单重复提交的问题。 附件为源代码,后台延迟了3秒,可直接在web服务器下部署运行,输入用户名和密码后,多点几次提交按钮,然后看控制台...

Global site tag (gtag.js) - Google Analytics