| 
                         /**  *   * @Title: getAjaxCross  * @Description: TODO(ajax请求,跨域)  * @param request  * @param response  */  @RequestMapping(value ="/getAjaxCross",method= {RequestMethod.GET})  public void getAjaxCross(HttpServletRequest request, HttpServletResponse response){  try {  response.setCharacterEncoding("UTF-8");    //设置允许多个域名允许跨域集合  String[] allowDomains = {"http://czt.casicloud.com", "http://czt.ming.com"};  Set allowOrigins = new HashSet(Arrays.asList(allowDomains));  String origin = request.getHeader("Origin");  if(allowOrigins.contains(origin)){  //设置允许跨域的配置:Access-Control-Allow-Origin: 响应头指定了该响应的资源是否被允许与给定的origin共享  response.setHeader("Access-Control-Allow-Origin", origin);  } 
//数据  Map<String, Object> resultMap = new HashMap<String, Object>();  resultMap.put("message", "ajax请求,跨域成功");  String result = JsonUtils.objectToJson(resultMap);    response.getWriter().write(result);  } catch (Exception e) {  e.printStackTrace();  }  } 
(2)前端页面代码如下: 
//4.ajax跨域  function getCookieAjaxCross() {  $.ajax({  type:"get",   url:"http://czt.ming.com/xxx/xxx/xxx/getAjaxCross",  async:true,  data:{},  dataType: 'json',  success: function(data) {  console.log(data);  }  });  }  getCookieAjaxCross(); 
(3)测试ajax跨域请求: 
通过访问页面,js触发ajax跨域请求,前端和后台如果不按照代码中配置相应参数会报各种跨域错误; 
2. ajax跨域请求获取和创建cookie案例(java) 
(1)启动一个java web项目,配置两个域名(host),czt.ming.com、czt.casicloud.com,java后端代码如下: 
注意:Access-Control-Allow-Credentials和Access-Control-Allow-Origin 
/**  *   * @Title: getCookieAjax  * @Description: TODO(ajax请求,跨域传递cookie)  * @param request  * @param response  */  @RequestMapping(value ="/getCookieAjax",method= {RequestMethod.GET})  public void getCookieAjax(HttpServletRequest request, HttpServletResponse response){  try {  response.setCharacterEncoding("UTF-8");    response.setHeader("Access-Control-Allow-Credentials", "true");  //设置允许多个域名允许跨域集合  String[] allowDomains = {"http://czt.casicloud.com", "http://czt.ming.com"};  Set allowOrigins = new HashSet(Arrays.asList(allowDomains));  String origin = request.getHeader("Origin");  if(allowOrigins.contains(origin)){  //设置允许跨域的配置:Access-Control-Allow-Origin: 响应头指定了该响应的资源是否被允许与给定的origin共享  response.setHeader("Access-Control-Allow-Origin", origin);  }    //获取cookie  Cookie[] cookies = request.getCookies();    //设置cookie  Cookie cookie = new Cookie("access_token_ajax", UUID.randomUUID().toString());  cookie.setPath("/");  response.addCookie(cookie);    //数据  Map<String, Object> resultMap = new HashMap<String, Object>();  resultMap.put("cookies", cookies);  resultMap.put("message", "ajax请求,跨域传递cookie成功");  String result = JsonUtils.objectToJson(resultMap);    response.getWriter().write(result);  } catch (Exception e) {  e.printStackTrace();  }  } 
(2)前端页面代码如下: 
注意:withCredentials和crossDomain(作用不明) 
//4.ajax跨域携带cookie和自定义请求头header  function getCookieAjaxCross() {  $.ajax({  type:"get",   url:"http://czt.ming.com/industry/api/publishForeign/getCookieAjax",  async:true,  data:{},  dataType: 'json',  xhrFields: {  withCredentials: true // 发送Ajax时,Request header中会带上 Cookie 信息。  },  crossDomain: true, // 发送Ajax时,Request header 中会包含跨域的额外信息,但不会含cookie(作用不明,不会影响请求头的携带)  success: function(data) {  console.log(data);  }  });  }  getCookieAjaxCross(); 
(3)测试ajax跨域请求获取和创建cookie: 
通过访问页面,js触发ajax跨域请求,前端和后台如果不按照代码中配置相应参数会报各种跨域错误; 
3. ajax跨域请求,携带请求头header案例(java) 
(1)启动一个java web项目,配置两个域名(host),czt.ming.com、czt.casicloud.com; 
(2)ajax跨域携带请求头会发送两次请求,一次预检查请求(options),预检查请求通过之后才会进行真正的请求,所以java后台需要配置相应的跨域过滤器,如下: 
import java.io.IOException; import java.util.Arrays; import java.util.HashSet; import java.util.Set;                         (编辑:91站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |