用户输入FormServlet链接

FormServlet-〉form.jsp->DoFormServlet

FormServlet:产生token,放在session中

form.jsp:hidden拿到token数据 并一同提交到>DoFormServlet

DoFormServlet:检测是否重复提交表单

//FormServlet

//产生表单
public class FormServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//产生随机数,表单号
TokenProcessor tp = TokenProcessor.getInstance(); String token = tp.generateToken(); request.getSession().setAttribute("token", token); request.getRequestDispatcher("/form.jsp").forward(request,response);
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { doGet(request,response);
} } //随机数发生器
class TokenProcessor{
private TokenProcessor(){} private static final TokenProcessor instance = new TokenProcessor(); public static TokenProcessor getInstance(){
return instance;
} public String generateToken(){
String token = System.currentTimeMillis()+new Random().nextInt()+""; try {
MessageDigest md = MessageDigest.getInstance("md5");
byte[] md5 = md.digest(token.getBytes()); BASE64Encoder encode = new BASE64Encoder(); return encode.encode(md5); } catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
throw new RuntimeException();
}
}
}

//form.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My jsp</title> </head> <body>
<form action="/NANA/servlet/DoFormServlet" method="post">
<input type="hidden" name="token" value="${token}">
用户名:<input type="text" name="username"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>

DoFormServlet:

public class DoFormServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
boolean b = isTokenValid(request);
if(!b){
System.out.println("submitted");
return;
} request.getSession().removeAttribute("token");
System.out.println("success,insert user"); } private boolean isTokenValid(HttpServletRequest request) {
// TODO Auto-generated method stub
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.equalsIgnoreCase(server_token)){
return false;
} return true;
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
} }

最新文章

  1. web前端面试总结
  2. hdu2066一个人的旅行(多源点多汇点的最短路径问题)
  3. GHOST WIN7系统64位经典优化版 V2016年
  4. iOS开发中使用静态库 .a 文件
  5. 【转】linux下tty,控制台,虚拟终端,串口,console(控制台终端)详解----不错
  6. 2、Lucene 最简单的使用(小例子)
  7. 191. Number of 1 Bits Leetcode Python
  8. NYOJ 904 search(stable_sort函数的应用)
  9. 通过BitSet完成对单词使用字母的统计
  10. Java web servers 间是如何实现 session 同步的
  11. API.day01
  12. windows微信双开
  13. Weblogic java生成wlfullclient.jar
  14. Codeforces Round #459 Div. 1
  15. Ubuntu 云服务器上部署自己的 Rails 应用
  16. python中通过字符串名来调用函数
  17. Android应用安全防护和逆向分析 ——apk混淆成其他语言代码
  18. linux下tree命令详解
  19. java外观模式(Facade)
  20. [LOJ #6433]「PKUSC2018」最大前缀和

热门文章

  1. SQL RIGHT JOIN 关键字
  2. RMAN 备份与恢复深入解析(二)
  3. 【转】 Homebrew – OSX下简单的包管理系统
  4. 远程调试hadoop各组件
  5. 发送一个简单的HTTP GET请求并且取回响应。
  6. Robotium 系列(2) - 简单介绍Monkey和MonkeyRunner
  7. 如何理解Stay hungry,stay foolish?
  8. Android 数据存储相关
  9. [C语言 - 12] Union联合
  10. 转载 深入理解JavaScript中的this关键字