跨域,防止表单重复提交

跨域1

<body>
    <input type="text" name="uname" id="uname"/>
    <input type="button" value="提交" id="button"/>
</body>
<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
    <script>
        $(function(){
            /*$("#button").click(function(){
                var uname=$("#uname").val();
                $.ajax({
                    url:"http://www.a.cn:8080/A",
                    type:"POST",
                    data:{"uname":uname},
                    success:function(result){
                        alert(result)
                    },
                    srror:function(){
                        alert(‘错‘);
                    }
                })
            })*/
            $("#button").click(function(){
                var uname=$("#uname").val();
                $.ajax({
                    url:"http://www.a.cn:8080/A?uname="+uname,
                    type:"GET",
                    jsonp:"jsonpCallBack",
                    dataType:"JSONP",
                    success:function(result){
                        alert(result)
                    },
                    srror:function(){
                        alert(‘错‘);
                    }
                })
            })
            /*$("#button").click(function(){
                var uname=$("#uname").val();
                $.ajax({
                    url:"BServlet?uname="+uname,
                    type:"GET",
                    success:function(result){
                        alert(result)
                    },
                    srror:function(){
                        alert(‘错‘);
                    }
                })
            })*/
        })
    </script>
@WebServlet("/A")
public class AServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收内容
        String uname = req.getParameter("uname");
        System.out.println("接收到的:"+uname);

        //接受ajax数据
        String back = req.getParameter("jsonpCallBack");
        System.out.println("jsonpCallBack"+back);
        String meiChuanKuZi = (String)JSON.toJSONString("MeiChuanKuZi");
        //响应结果
        resp.getWriter().write(back+"("+meiChuanKuZi+")");
            /*resp.getWriter().write("meiChuanKuZi");*/
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*//接收内容
        String uname = req.getParameter("uname");
        System.out.println("接收到的:"+uname);
*//*

        //设置请求头
        resp.setHeader("Access-Control-Allow-Origin","*");
*//*

        //接受ajax数据
        String back = req.getParameter("jsonpCallBack");
        System.out.println("jsonpCallBack"+back);

        String meiChuanKuZi = (String)JSON.toJSONString("MeiChuanKuZi");

        //响应结果
        resp.getWriter().write(back+"("+meiChuanKuZi+")");*/
    }
}

表单重复提交

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <script src="js/jquery-1.8.3.min.js"></script>
    <script type="text/javascript">
        var flag=false;
        function fromSubmit(){
            if(!flag){
                flag=true;
                return true;
            }else{
                return false;
            }
        }

        $(function(){
            $.ajax({
                url:"ToKenServlet",
                type:"POST",
                success:function(token){
                    $("#hiddenToken").val(token);
                }
            })
        })
    </script>
</head>
<body>
    <form action="FromServlet" onsubmit="return fromSubmit()" method="post">
        <input type="text" name="uname" id="uname"/>
        <input type="hidden" id="hiddenToken" name="formToken"/>
        <input type="submit" value="提交"/>
    </form>
</body>
</html>
@WebServlet("/FromServlet")
public class FromServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");

        System.out.println("进了FromServlet");
        //提取
        String formToken = req.getParameter("formToken");
        //获取会话中的
        String sessionToken = (String)req.getSession().getAttribute("sessionToken");
        //判断
        if (!formToken.equals(sessionToken)){
            resp.getWriter().write("您已重复提交!!!");
            return;
        }

        //接收内容
        String uname = req.getParameter("uname");
        System.out.println("接收到的:"+uname);
        req.getSession().removeAttribute("sessionToken");

        resp.getWriter().write("meiChuanKuZi");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
@WebServlet("/ToKenServlet")
public class ToKenServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("进了ToKenServlet");
        //生成令牌
        String token= UUID.randomUUID().toString();
        //保存
        req.getSession().setAttribute("sessionToken",token);
        //响应
        resp.getWriter().write(token);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

原文地址:https://www.cnblogs.com/whtt/p/12269014.html

时间: 2024-10-09 01:07:23

跨域,防止表单重复提交的相关文章

跨域与防止表单重复提交

什么是跨域? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的. 广义的跨域: 1.) 资源跳转: A链接.重定向.表单提交 2.) 资源嵌入: <link>.<script>.<img>.<frame>等dom标签,还有样式中background:url().@font-face()等文件外链 3.) 脚本请求: js发起的ajax请求.dom和js对象的跨域操作等 其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场

HTTP(“跨域问题”和“防止表单重复提交”)

一.跨域问题 能够正常请求,但是没有办法获取到响应结果 解决方案一:设置请求头,在请求的资源中设置Access-Control-Allow-Origin请求头 //3.设置请求头 response.setHeader("Access-Control-Allow-Origin", "*"); 解决方案二:.JSONP解决跨域问题 普通的跨域访问问题,浏览器会进行拦截,凡是src属性的都不会拦截 ajax:http://www.a.com:8080/a/AServlet

JSONP解决跨域问题,防止表单重复提交,防止XSS攻击

一.跨域问题:能够正常请求,但是没有办法获取到响应结果 解决方案一:设置请求头,在请求的资源中设置Access-Control-Allow-Origin请求头 //3.设置请求头 response.setHeader("Access-Control-Allow-Origin", "*"); 二.JSONP解决跨域问题 普通的跨域访问问题,浏览器会进行拦截,凡是src属性的都不会拦截 ajax:http://www.a.com:8080/a/AServlet JSON

防止表单重复提交

客户端防止表单重复提交: 不足之处:用户单击”刷新”,或单击”后退”再次提交表单,将导致表单重复提交 <script type="text/javascript"> //方式一 var iscommitted = false; function dosubmit(){ if(!iscommitted){ iscommitted = true; return true; }else{ return false; } } //方式二 function dosubmit(){ d

[原创]java WEB学习笔记34:Session 案例 之 解决表单重复提交

本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 ---------------------------------

[PHP]防止表单重复提交的几种方法

--------------------------------------------------------------------------------------------------- 1. 使用JS让按钮在点击一次后禁用(disable).=> 防止多次点击发生,实现方式较简单. 缺点:若客户端禁止JavaScript脚本,则失效. 2. 在提交成功后执行页面重定向(redirect).=> 转到提交成功信息页面. 特点:避免F5重复提交,消除浏览器前进和后退按导致的同样问题.

form表单重复提交问题

导致表单重复提交的原因是:第一次提交的表单会被缓存到内存中,直到页面下次提交或页面关闭或转向其他页面时才消失.在自调用返回时,内存中的数据依然在,这时页面中的判断提交的代码依然可以检测到提交的值,顾会产生重复提交的效果. 解决方法 Ⅰ重定向,页面提交后转到另一个页面而不是本页面 Ⅱ提交表单后提交按钮变灰/隐藏提交按钮 Ⅲ增加令牌token 访问页面前产生token public void toStart(HttpServletRequest req, HttpServletResponse re

如何防止表单重复提交

一.有很多的应用场景都会遇到重复提交问题,比如: 1.点击提交按钮两次.2.点击刷新按钮.3.使用浏览器后退按钮重复之前的操作,导致重复提交表单.4.使用浏览器历史记录重复提交表单.5.浏览器重复的 HTTP 请求. 二.防止表单重复提交的方法 1.禁掉提交按钮 表单提交后使用 Javascript 使提交按钮disable.这种方法防止心急的用户多次点击按钮.但有个问题,如果客户端把 Javascript 给禁止掉,这种方法就无效了. 2.Post/Redirect/Get 模式 在提交后执行

防止表单重复提交的几种策略

表单重复提交是在多用户Web应用中最常见.带来很多麻烦的一个问题.有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次. 点击刷新按钮. 使用浏览器后退按钮重复之前的操作,导致重复提交表单. 使用浏览器历史记录重复提交表单. 浏览器重复的HTTP请求. 几种防止表单重复提交的方法 禁掉提交按钮.表单提交后使用Javascript使提交按钮disable.这种方法防止心急的用户多次点击按钮.但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了. 我之前的文章曾说过用一些