| /***
 * @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和自定义请求头headerfunction 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;
 (编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |