• 跨域问题 初涉


    前面做了一个demo实现ssl证书认证,实现后再跑整个项目流程时发现,有些连接、返回值无法正常连接与传递。

    这时,就涉及到了跨域问题。

    所以要进行一些改动

    一、前台AJAX访问

    var sign_url=basepath+"/user/login.do";

    修改前的ajax:

    $.ajax({
      url: sign_url,
      data: {loginName:username,pwd:password},
      dataType: 'json',
      type: 'post',
      async: true,
      success: function (data) {
        alert("success");
      },
      error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert("error");
      }
    });

    修改后的ajax:

    $.ajax({
      url: sign_url+"?loginName="+username +"&pwd="+password,
      dataType: 'jsonp',
      type: 'post',
      async: true,
      jsonp: "callback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
      jsonpCallback:"flightHandler",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
      success: function (data) {
        alert("success");
      },
      error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert("error");
      }
    });

    二、后台返回

    修改前的后台返回:

    public static void write(final HttpServletResponse response, final Object obj1, final String datePattern) {
      if(obj1==null) return;
      Object obj = obj1;
      PrintWriter out = null;
      try {
        JsonConfig cfg = new JsonConfig();
        registerConf(cfg);
        if(obj1 instanceof Pagination<?>) obj = JSONObject.fromObject(obj1,cfg);
        dformat.applyPattern(datePattern);

        Object json = null;
        defaultNull(obj);
        if(obj instanceof List||(obj instanceof String && obj.toString().startsWith("[") && obj.toString().endsWith("]"))){
          json = JSONArray.fromObject(obj,cfg);
        }else{
          json = JSONObject.fromObject(obj,cfg);
        }
        out = response.getWriter();
        out.print(json);

      } catch (IOException e) {
        LOG.error("输出流获取异常[obj]"+obj.toString(), e);
      } finally {
        if(out!=null) out.close();
      }
    }

    修改后的后台:

    public static void writeByCallback(final HttpServletResponse response, final Object obj1, final String datePattern, final HttpServletRequest request) {
      if(obj1==null) return;
      Object obj = obj1;
      PrintWriter out = null;
      try {
        JsonConfig cfg = new JsonConfig();
        registerConf(cfg);
        if(obj1 instanceof Pagination<?>) obj = JSONObject.fromObject(obj1,cfg);
        dformat.applyPattern(datePattern);

        Object json = null;
        defaultNull(obj);
        if(obj instanceof List||(obj instanceof String && obj.toString().startsWith("[") && obj.toString().endsWith("]"))){
          json = JSONArray.fromObject(obj,cfg);
        }else{
          json = JSONObject.fromObject(obj,cfg);
        }
        out = response.getWriter();
        out.println(request.getParameter("callback")+"("+json.toString()+")");//返回jsonp格式数据
      } catch (IOException e) {
      LOG.error("输出流获取异常[obj]"+obj.toString(), e);
      } finally {
        if(out!=null) out.close();
      }
    }

    添加了final HttpServletRequest request,通过request获取callback(即:request.getParameter("callback")),前台ajax传过来的jsonp

  • 相关阅读:
    Java抓取网页数据(原网页+Javascript返回数据)
    Android Bundle类
    【设计模式】命令模式
    oracle触发器实例
    各大名企笔试及面经大全(程序猿必读)
    数据库索引的作用和长处缺点
    一个int类型究竟占多少个字节
    如何遮挡电影英汉字幕
    如何重启mysql服务
    修改mysql默认字符集的方法
  • 原文地址:https://www.cnblogs.com/xiaoSY-learning/p/6588618.html
Copyright © 2020-2023  润新知