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. 正则,re模块

    一.正则表达式(精准匹配) 匹配字符串内容的一种规则 二.字符组 在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示 常见字符组格式如下:[0123456789],[0-9],[ ...

  2. 转载的,讲解java.util的集合类

    本文是转载的 http://www.ibm.com/developerworks/cn/java/j-lo-set-operation/index.html#ibm-pcon 在实际的项目开发中会有很 ...

  3. break、continue与return的区别

    1. break break语句的使用场合主要是switch语句和循环结构.在循环结构中使用break语句,如果执行了break语句,那么就退出循环,接着执行循环结构下面的第一条语句.如果在多重嵌套循 ...

  4. 利用git bash和git gui向git远程仓库提交文件

    1.首先在该文件夹下git init 2.然后在github下面创建一个新仓库去存储你的代码 3.然后利用add添加远程仓库 4.然后点击stage changed 5.最后点击长传 参考链接:htt ...

  5. 阿里云服务器tomcat启动慢解决方案

    yum -y install rng-tools( 熵服务)     cp /usr/lib/systemd/system/rngd.service /etc/systemd/system     v ...

  6. RESTful处理JSON

    @RequestMapping(value = "/dblist", method = RequestMethod.GET) @ResponseBody public Map< ...

  7. ubuntu下安装ros出现“无法下载-package.ros.org中某个包-校验和不符”的解决方法

    新安装的Ubuntu14.04,为了科研马上准备装ros indigo,却困难重重,一步一个坎. 比如说按照ros wiki里面一步一步来,当运行sudoapt-get update 然后出现下列情况 ...

  8. Java-Maven-Runoob:Maven 构建 Java 项目

    ylbtech-Java-Maven-Runoob:Maven 构建 Java 项目 1.返回顶部 1. Maven 构建 Java 项目 Maven 使用原型 archetype 插件创建项目.要创 ...

  9. Eclipse格式化代码,自动换行设置

    每次用Eclipse自带的Ctrl+shift+f格式化代码时,如果原来的一行代码大于80列,Eclipse就会自动换为多行,这点个人感觉不是很舒服,简单试了一下,通过以下方式可以修改   1.pre ...

  10. 查询mysql 哪些表正在被锁状态

    查询mysql 哪些表正在被锁状态 show OPEN TABLES where In_use > 0; 参考链接:http://zhidao.baidu.com/link?url=tCQ70t ...