zoukankan      html  css  js  c++  java
  • java_客户端防表单重复提交和服务器端session防表单重复提交

    用户输入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);
    	}
    
    }
    


     

  • 相关阅读:
    传Windows 7 RC泄露版中含有木马 狼人:
    金山:3G时代 上网安全面临更大挑战 狼人:
    McAfee:僵尸网新威胁远甚Conficker 狼人:
    安全专家:70GB财务数据被僵尸网络盗窃 狼人:
    卡巴斯基中国地区4月恶意软件排行榜 狼人:
    MPAA组织遭遇尴尬 网页存在XSS攻击漏洞 狼人:
    股市回暖 网上炒股安全风险骤增 狼人:
    微软首次针对Windows 7推杀毒软件 年内将推出 狼人:
    黑客数度入侵美国联邦航空总署飞航控制系统 狼人:
    瑞星对Windows7捆绑杀毒软件等消息的回应 狼人:
  • 原文地址:https://www.cnblogs.com/MarchThree/p/3720429.html
Copyright © 2011-2022 走看看