web第三节

一.跨域问题:

  能够正常请求,但是没有办法获取到响应结果

  1.设置请求头

    response.setHeader("Access-Control-Allow-Origin", "*");

  代码如下:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.接受数据
        String username=request.getParameter("username");
        System.out.println("接受的数据:"+username);
        //接受Ajax传递的数据
        //2.响应结果,数据必须为JSON格式
        response.getWriter().write("success");
        //3.设置请求头
        response.setHeader("Access-Control-Allow-Origin", "*");
    }

  2.JSONP解决跨域问题

    普通的跨域访问问题,浏览器会进行拦截,凡是src属性的都不会拦截

    ajax:http://localhost:8080/a/AServlet

    JSONP实现原理:动态加载

  TokenServlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                    //生成令牌
                    String token = UUID.randomUUID().toString();
                    //令牌保存到session当中
                    request.getSession().setAttribute("sessionToken",token);
                    //响应
                    response.getWriter().write(token);
                }

  FormServlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                    //验证令牌
                    //获取页面提交的隐藏域数据
                    String formToken = request.getParameter("formToken");
                    //获取Session中的Token
                    String sessionToken = (String)request.getSession().getAttribute("sessionToken");
                    //如果页面中获取的和session中不一致,代表已经提交过了,不要重复提交
                    if(!formToken.equals(sessionToken)){
                        response.getWriter().write("不要重复提交~");
                        return;
                    }

                    //接收数据
                    String username = request.getParameter("username");
                    System.out.println("接收的数据为:"+username);
                    //必须将token清空,不然永远是一致的
                    request.getSession().removeAttribute("sessionToken");

                    try {
                        //模拟网络延迟
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    //返回数据
                    response.getWriter().write("success");
                }

3.防止XSS攻击:

  大部分浏览器都已经解决了该问题

  脚本注入
  防止XSS攻击:后台创建Filter过滤器,过滤所植入的脚本数据

你可能感兴趣的:(web第三节)