JavaWeb_session_应用_防止注册表单页面的重复提交
2013-06-13 17:37
711 查看
本博文为子墨原创,转载请注明出处!
http://blog.csdn.net/zimo2013/article/details/9088503
http://blog.csdn.net/zimo2013/article/details/9088503
/* * 防止表单注册页面的重复提交 * * 在该页面上产生一个令牌值 * 该令牌值一个添加至服务器的session属性中,另一个随传递至浏览器页面中,通过比对2个令牌值是否相等,来判断是否处理相应请求。 * 注册成功后,删除在服务器中的令牌值,由于已经找不到令牌值而防止了表单的重复提交! * * Register.java * http://blog.csdn.net/strawberry2013 * 2013-6-13 */ package com.baidu; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Random; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import sun.misc.BASE64Encoder; public class Register extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getSession().setAttribute("token", TokenProcessor.getInstance().generateToken());//添加一个令牌属性 request.getRequestDispatcher("/register.jsp").forward(request, response); //转发至注册页面表单 } } //令牌,用于参数一个随机唯一的令牌值 class TokenProcessor{ private TokenProcessor(){} private static final TokenProcessor token = new TokenProcessor(); public static TokenProcessor getInstance(){ return token; } public String generateToken(){ String token = System.currentTimeMillis()+new Random().nextInt()+""; //随机的值 try { MessageDigest md = MessageDigest.getInstance("md5"); //注意下面的处理方式 byte[] md5 = md.digest(token.getBytes()); return new BASE64Encoder().encode(md5); //base64编码 } catch (NoSuchAlgorithmException e) { throw new RuntimeException(e); } } }
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>欢迎您注册</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <style type="text/css"> body{ margin-left: 100px; margin-bottom: 100px; } #reg{ margin: auto; margin-left: auto; } .one{ background-color: #C9FADB; } .two{ background-color: #FFFFCC; } </style> </head> <body> <div name="rge"> <form action="/Day01/servlet/doRegister" method="post"> <input type="hidden" name="token" value="${token}"> <!-- 传递一个令牌值 -->> <table border="1" bordercolor="#000099" width="523" cellpadding="10" cellspacing="0" height="343"> <tr><td colspan="2" align="center">注册页面</td></tr> <tr> <td class="one">用户名:</td> <td class="two"><input type="text" name="username"></td> </tr> <tr> <td class="one">密码:</td> <td class="two"><input type="password" name="pass" /></td> </tr> <tr> <td class="one">确认密码:</td> <td class="two"><input type="password" name="pass" /></td> </tr> <tr> <td class="one">性别:</td> <td class="two"> <input type="radio" name="sex" value="nan" />男 <input type="radio" name="sex" value="nv" />女 </td> </tr> <tr> <td class="one">技术:</td> <td class="two"> <input type="checkbox" name="tech" value="Java"/>Java <input type="checkbox" name="tech" value="Html"/>Html <input type="checkbox" name="tech" value="C++"/>C++ </td> </tr> <tr> <td class="one">国家:</td> <td class="two"> <select name="country"> <option value="none">---国家---</option> <option value="zn">中国</option> <option value="usa">美国</option> </select> </td> </tr> <tr bgcolor="#CCFFFF"> <th colspan="2"> <input type="submit" value="提交数据" /> <input type="reset" value="置空" /> </th> </tr> </table> </form> </div> </body> </html>
/* * doRegister.java */ package com.baidu; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class doRegister extends HttpServlet { public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String serverToken = (String) request.getSession().getAttribute("token"); String clientToken = request.getParameter("token"); if(serverToken!=null && serverToken.equals(clientToken)){ //比对令牌值是否相等 System.out.println("注册成功!"); request.getSession().removeAttribute("token"); return; } System.out.println("注册失败!"); return; } }
相关文章推荐
- JavaWeb_session_应用_防止注册表单页面的重复提交
- JavaWeb ——使用Session防止表单重复提交
- JAVAWeb_利用Session防止表单重复提交:10-客户端防表单重复提交和服务器端session防表单重复提交
- JavaWeb---总结(十三)使用Session防止表单重复提交
- JavaWeb之——使用Session防止表单重复提交(插曲)
- JAVAWeb_利用Session防止表单重复提交:10-客户端防表单重复提交和服务器端session防表单重复提交
- java web 学习十三(使用session防止表单重复提交)
- JAVA_WEB之Session防止表单重复提交
- JavaWeb 如何防止表单重复提交 - 使用Token,令牌
- JavaWeb温习之防止表单重复提交
- JAVA防止重复提交Web表单的方法
- JAVAWEB开发之Struts2详解(四)——ognl与valueStack(重点)、Struts常用标签、防止表单重复提交、Struts2中内置json插件
- [Java拾遗五]使用Session防止表单重复提交
- 【学习笔记】Web开发中防止页面刷新后表单重复提交,表单Token设置示例
- Session应用之---防止表单重复提交
- javaweb中防止表单的重复提交(隐藏域+Session)
- java 防止表单重复提交(使用Session)
- java web 防止表单重复提交解决方案
- session 的应用——防止表单重复提交——2.0版
- [Java拾遗五]使用Session防止表单重复提交