• 防止表单重复提交


    防止表单重复提交最好的方式就是使用PRG模式
    用户已Post方式提交数据,Servlet以重定向的方式将用户重定向到另一个访问资源上,以Get的方式请求最终的资源。

    使用Token机制处理表单重复提交

    附Struts2的token介绍:http://www.cnblogs.com/shininguang/p/4922880.html

    1、接收客户GET请求,产生Token,并放在Session和request中各一份
    2、在表单中接收token
    3、用户提交表单
    4、处理表单请求前验证Token是否和Session中一直,如果不一致则视为重复提交,当成功提交后,将Session中的Token销毁。

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    / 使用UUID作为token的值 /
    String token = UUID.randomUUID().toString();
    / 当发生请求的时候在请求的页面里传入一个token /
    request.setAttribute("token", token);

    / 将Session中的token也存一份*/
    HttpSession session = request.getSession();
    session.setAttribute("sessiontoken", token);

    / 当用户通过get方式访问token的时候,使用请求转发的方式重定向到token.jsp /
    request.getRequestDispatcher("/WEB-INF/views/token/token.jsp").forward(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    / 从请求的页面获得token /
    String token = (String) request.getParameter("token");
    / 获得金额 /
    String money = (String) request.getParameter("money");
    request.setAttribute("money", money);

    / 获得sessiontoken /
    HttpSession session = request.getSession();
    String sessiontoken = (String) session.getAttribute("sessiontoken");
    if(session != null && token.equals(sessiontoken)) {
    / 操作成功后将session中的token属性移除 /
    session.removeAttribute("sessiontoken");
    request.getRequestDispatcher("/WEB-INF/views/token/tokensuccess.jsp").forward(request, response);
    } else {
    / 重复提交跳转到repeat页面 /
    request.getRequestDispatcher("/WEB-INF/views/token/tokenrepeat.jsp").forward(request, response);
    }

    }


  • 相关阅读:
    Visual Studio自带的的Developer Command Prompt对话框
    利用VS(Visual Studio)自带的工具查看DLL文件的信息
    谷歌面试官反馈级别
    Inno Setup中多语言时,使用占位符填充
    SQL*Plus命令
    Oracle 所有字典
    彻底完全卸载 SQL Server 2005 的图文教程
    win7(windows 7)系统下安装SQL2005(SQL Server 2005)图文教程
    创建表空间、新增用户、给用户赋予DBA权限 、删除用户下的上有数据表
    ORA-01012: not logged on
  • 原文地址:https://www.cnblogs.com/shininguang/p/4922870.html
Copyright © 2020-2023  润新知