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