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

    /****************************************************DoFormServlet********************************************************/

    package session;

    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;


    public class DoFormServlet extends HttpServlet {
        
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            /*String name = request.getParameter("user");
            try {
                Thread.sleep(1000*3);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //模拟向数据库注册用户
            System.out.println("向数据库注册用户");*/
            
            boolean b = isTokenValid(request);
            if(!b){
                System.out.println("请不要重复提交");
                return;
            }
            //在向数据库中提交之前要remove掉表单号
            request.getSession().removeAttribute("token");
            System.out.println("向数据库注册用户");
            
        }
        //判断表单号是否有效
        private boolean isTokenValid(HttpServletRequest request) {
            //得到客户机带过来的表单号
            String clientToken = request.getParameter("token");
            //判断客户机是否带表单号过来
            //如果没带过来,我也认为你是重复提交
            if(clientToken==null){
                return false;
            }
            
            //判断服务器里有没有表单号
            String serverToken = (String) request.getSession().getAttribute("token");
            //服务端里如果没有的话,也不行
            if(serverToken == null){
                return false;
            }
            //客户端和服务端不想等的话也不行
            if(!clientToken.equals(serverToken)){
                return false;
            }
            return true;
        }

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }

    }

    /*********************************************************************************form.jsp***********************************************/

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <form action="/day07/DoFormServlet" method="post">
            <input type="hidden" name="token" value="${token}">
             用户名:<input type="text" name="username"><br>
             <input type="submit" value="提交">
        </form>
    </body>
    </html>

    /****************************************************************DoFormServlet**************************************************************/

    package session;

    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;


    public class DoFormServlet extends HttpServlet {
        
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            /*String name = request.getParameter("user");
            try {
                Thread.sleep(1000*3);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //模拟向数据库注册用户
            System.out.println("向数据库注册用户");*/
            
            boolean b = isTokenValid(request);
            if(!b){
                System.out.println("请不要重复提交");
                return;
            }
            //在向数据库中提交之前要remove掉表单号
            request.getSession().removeAttribute("token");
            System.out.println("向数据库注册用户");
            
        }
        //判断表单号是否有效
        private boolean isTokenValid(HttpServletRequest request) {
            //得到客户机带过来的表单号
            String clientToken = request.getParameter("token");
            //判断客户机是否带表单号过来
            //如果没带过来,我也认为你是重复提交
            if(clientToken==null){
                return false;
            }
            
            //判断服务器里有没有表单号
            String serverToken = (String) request.getSession().getAttribute("token");
            //服务端里如果没有的话,也不行
            if(serverToken == null){
                return false;
            }
            //客户端和服务端不想等的话也不行
            if(!clientToken.equals(serverToken)){
                return false;
            }
            return true;
        }

        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            doGet(request, response);
        }

    }

  • 相关阅读:
    ubuntu 右键添加出现 Open in terminal 选项
    03创建DataFrame的5种方法
    pandas——read_excel()方法学习
    Win10修改编辑hosts文件无法保存怎么办
    pandas插入一行记录
    python中的日期类型转换
    解决Ubuntu安装VM Tools请确保您已登录客户机操作系统。在客户机中装载CD驱动器启动终端,使用tar解压缩安装程序,然后执行vmware-insall.pl安装VMware Tools。
    怎么保存退出 vim 编辑
    反射
    Oracle
  • 原文地址:https://www.cnblogs.com/siashan/p/3916833.html
Copyright © 2011-2022 走看看