1 扫盲知识

  1.1 Ajax为什么存在跨域问题

    因为浏览器处于安全性的考虑不允许JS执行跨域请求。

  1.2 浏览器为什么要限制JS的跨域访问

    如果浏览器允许JS的跨域请求就很容易造成 CSRF (Cross-site request forgery),中文名称:跨站请求伪造,缩写为:CSRF/XSRF。

  1.3 什么是CSRF

    

2 Ajax如何实现跨域访问

  2.1 利用JSONP实现

    技巧01:如果Ajax指定的数据类型为JSONP时,后台接口必须支持返回JSONP格式

3 SpringBoot设置支持响应数据类型为JSONP

  3.1 写一个配置文件即可

package cn.xiangxu.demo_code.commons.config;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpResponseBodyAdvice;
import org.springframework.web.servlet.mvc.method.annotation.AbstractMappingJacksonResponseBodyAdvice; /**
* @author 王杨帅
* @create 2018-07-19 22:40
* @desc JSONP跨域支持配置
**/
@ControllerAdvice
public class JsonpAdvice extends AbstractJsonpResponseBodyAdvice {
public JsonpAdvice() {
super("callback","jsonp");
}
}

  3.2 编写一个测试类

    技巧01:响应数据必须是一个对象

package cn.xiangxu.demo_code.web;

import cn.xiangxu.demo_code.commons.configProperties.SftpProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;
import java.util.Map; /**
* @author 王杨帅
* @create 2018-07-17 8:53
* @desc 测试控制类
**/
@RestController
@RequestMapping(value = "/test")
@Slf4j
public class TestController { @GetMapping(value = "/connect")
public Map connect() {
String result = "前后端连接成功_王杨帅";
log.info(result);
Map<String, Object> testData = new HashMap<>();
testData.put("testData", result);
return testData;
} }

  》测试返回JSON格式的响应数据

  》测试返回JSONP格式的响应数据

4 CORS

  4.1 扫盲知识

    当后台不支持跨域请求时,无论你前台怎么使劲也是白搭;【AJAX使用JSONP时除外】;

    只要后台支持了跨域请求,就可以接收前台的跨域请求了

  4.2 SpringBoot开启跨域请求

    利用@CrossOrigin注解实现,该注解可以在类和方法上使用

    技巧01:使用JSOP跨域时,后台不需要开启跨域请求,因为人家JSOP解决跨域时本能就是可以访问跨域资源的,只要得到的响应数据是JSONP格式就可以啦

5 总结

  5.1 解决跨域问题的方法

    》前端解决:JSONP、代理服务器

    》后端解决:开启跨域支持

  5.2 后台开启了跨域支持,通过浏览器访问时失败

    》问题:这是因为浏览器层面对JS发出的跨域请求进行了拦截,目的是为了防止 CSRF(跨站请求伪造)

    》解决:前端的跨站请求使用JSONP,后端响应的数据格式为JSONP格式即可

    》技巧01:前端使用JSONP时,后端只需要返回JSONP格式的响应数据即可,不用支持跨站请求

    》技巧02:前端使用Angualr或者Ionic开发时可以使用一个配置文件配置一个代理服务器

SpringBoot22 Ajax跨域、SpringBoot返回JSONP、CSRF、CORS的更多相关文章

  1. 【PHP】Ajax跨域解决方案 、jsonp、cors

    参考文章: 1.https://blog.csdn.net/u014727260/article/details/72793459 (后台java,实际上差不多) 2. 如何解决ajax跨域传输 数据 ...

  2. Ajax操作如何实现跨域请求 (JSONP和CORS实现Ajax跨域的原理)

    由于浏览器存在同源策略机制,同源策略阻止ajax (XMLHttpRequest) 从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. 特别的:由于同源策略是浏览器的限制,所以请求的发送和响 ...

  3. JAVAEE——宜立方商城11:sso登录注册功能实现、通过token获得用户信息、Ajax跨域请求(jsonp)

    1. 学习计划 第十一天: 1.sso注册功能实现 2.sso登录功能实现 3.通过token获得用户信息 4.Ajax跨域请求(jsonp) 2. Sso系统工程搭建 需要创建一个sso服务工程,可 ...

  4. 跨域解决之JSONP和CORS的详细介绍

    JSONP跨域和CORS跨域 什么是跨域? 跨域:指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器的安全限制! 同源策略 同源策略:域名.协议.端口均相同. 浏览器执行Jav ...

  5. 学习AJAX必知必会(4)~同源策略、解决跨域问题(JSONP、CORS)

    一.同源策略(Same-Origin Policy),是浏览器的一种安全策略. 1.同源(即url相同):协议.域名.端口号 必须完全相同.(请求是来自同一个服务) 2.跨域:违背了同源策略,即跨域. ...

  6. ajax 跨域 springboot

    CORS 定义 Cross-Origin Resource Sharing(CORS)跨来源资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 ...

  7. ajax跨域原理以及jsonp使用

    jsonp介绍: JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题. 由于同源策略,一般来说位于 server1.example. ...

  8. ajax跨域获取返回值

    js代码 $.ajax({ async:false, url: 'https://***/api/prepareApi.getDanMu?sqlMapId=findBarrage', // 跨域URL ...

  9. [妙味Ajax]第三课:AJAX跨域解决方案:JSONP

    知识点总结: JSONP(JSON with Padding): 1.script标签 2.用script标签加载资源是没有跨域问题的 在资源加载进来之前定义好一个函数,这个函数接收一个参数(数据), ...

随机推荐

  1. 【解题报告】[动态规划] - PID90 / 未出现的子串

    原题地址:http://www.rqnoj.cn/problem/90 解题思路:题目看起来不太像动态规划... 我用一个数组f[i][j]来表示在数组第i个元素的后面第一次出现j的位置,为-1则是没 ...

  2. HDU - 6180:Schedule(简单贪心)

    There are N schedules, the i-th schedule has start time s i  si and end time e i  ei (1 <= i < ...

  3. Kubernetes安装部署演示介绍

    四.安装k8s 1.安装 使用的是k8s 1.2.4版本. 将kubernetes.tar.gz 上传主机,并解压. tar -xzvf kubernetes.tar.gz cd kubernetes ...

  4. XMemcached使用经历

    XMemcached就是Memcached的java客户端之一,目前项目里用到了.据说它比起其他的java客户端从性能上要好一点,实现方式是NIO的.先看怎么实例化出来一个Memcached客户端吧: ...

  5. firstModel权限问题

    laravel根目录下没有 .env , 执行 cp .env.example .envstorage和bootstrap/cache 没有给写入权限, 执行 chmod -R 777 storage ...

  6. Amoeba mysql读写分离搭建及介绍

    Amoeba mysql读写分离搭建及介绍 推荐: http://blog.chinaunix.net/uid-20639775-id-154600.html

  7. 【转】jmeter实践

    目录(?)[-] Jmeter相关概念简介 应用实例 AbApacheBench对比 本文主要介绍性能测试中的常用工具jmeter的使用方式,以方便开发人员在自测过程中就能自己动手对系统进行自动压测和 ...

  8. NGINX通过Stream转发ftp请求

    一.NGINX 1.9之前,需要安装第三方的TCP插件: http://www.cnblogs.com/i-blog/p/6165378.html 二.1.9之后直接使用Stream配置就可以了,当然 ...

  9. innodb事务日志详解

    首先看InnoDB的缓存和文件的关系图如下: InnoDB事务日志功能介绍 InnoDB使用日志来减少提交事务时的开销.因为日志中已经记录了事务,就无须在每个事务提交时把缓冲池的脏块刷新(flush) ...

  10. 开启vmotion,实现虚拟机可以在线迁移的选项

    先决条件: 1.vcenter5.5 2.vmotion服务开启 3.分布式交换机已经部署完毕 4.虚拟机在线迁移必须在web管理下,在vclient不可以