springboot实现ajax跨域请求
2017-08-31 17:28
302 查看
有段时间没写文章了。看到有人提问ajax跨域请求的问题。
博主要再次强调,跨域,就是从不同的的IP端口获取数据,比如说,从www.baidu.com获取数据,就叫跨域!那么localhost:8080与localhost:8081之间呢?也叫跨域。如果处理的不好,就会报错,不仅前端报错,后端也会报错。
那么如何解决呢?着急的人,请直接往下看,不急的请听我细细道来,一定能解决您的问题。我再此保证!
好多人都说,spring对跨域有自己的一套,比如实现了这个类那个类的。还有说是在ajax里面加上 _method 等等,众说纷纭啊!到底是不是大家所说的那样呢?先来看下常规的。解决PUT和DELETE请求时,_method方法到底好不好使呢??答案是,确实管用!那么实现其他类好使吗?答案是:在springboot中不适用。因为它没有XML可以配置。OK,好了,既然你说_method能解决PUT请求,那就用它呗。答案是,肯定不行。为啥不行呢?
你想一想,你要去用PUT,DELETE,说明什么?肯定是RestFul请求啊,对不对。既然是rest,那么肯定会部署服务器啊,那么服务器的端口和地址肯定不是你本机吧,那你怎么指定啊?涉及什么问题啊,跨域,是跨域了,对不对?都跨域了,你是不是应该解决跨域问题啊。那你这个_method方法还能搞定需求吗,指定不能啊。那咋办啊?网上有很多答案,比如jsonp啊,$.getJSON啊等等,太多太多。但实际解决的问题,很少。比如jsonp他的返回格式需要callback,那么你封装json时就要加入callback,那么就毁坏了rest的格式。至于其他的,更别提了,不实用。
直接看代码,
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class CrossDomain extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*")
.allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
.allowCredentials(false).maxAge(3600);
}
}直接把这个代码粘贴进去启动,就会完成跨域的安全性过滤。
原理还得看代码。以后有时间,我会和大家一起分析代码。先到这吧,谢谢。
博主要再次强调,跨域,就是从不同的的IP端口获取数据,比如说,从www.baidu.com获取数据,就叫跨域!那么localhost:8080与localhost:8081之间呢?也叫跨域。如果处理的不好,就会报错,不仅前端报错,后端也会报错。
那么如何解决呢?着急的人,请直接往下看,不急的请听我细细道来,一定能解决您的问题。我再此保证!
好多人都说,spring对跨域有自己的一套,比如实现了这个类那个类的。还有说是在ajax里面加上 _method 等等,众说纷纭啊!到底是不是大家所说的那样呢?先来看下常规的。解决PUT和DELETE请求时,_method方法到底好不好使呢??答案是,确实管用!那么实现其他类好使吗?答案是:在springboot中不适用。因为它没有XML可以配置。OK,好了,既然你说_method能解决PUT请求,那就用它呗。答案是,肯定不行。为啥不行呢?
你想一想,你要去用PUT,DELETE,说明什么?肯定是RestFul请求啊,对不对。既然是rest,那么肯定会部署服务器啊,那么服务器的端口和地址肯定不是你本机吧,那你怎么指定啊?涉及什么问题啊,跨域,是跨域了,对不对?都跨域了,你是不是应该解决跨域问题啊。那你这个_method方法还能搞定需求吗,指定不能啊。那咋办啊?网上有很多答案,比如jsonp啊,$.getJSON啊等等,太多太多。但实际解决的问题,很少。比如jsonp他的返回格式需要callback,那么你封装json时就要加入callback,那么就毁坏了rest的格式。至于其他的,更别提了,不实用。
直接看代码,
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@Configuration
public class CrossDomain extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*")
.allowedMethods("GET", "HEAD", "POST","PUT", "DELETE", "OPTIONS")
.allowCredentials(false).maxAge(3600);
}
}直接把这个代码粘贴进去启动,就会完成跨域的安全性过滤。
原理还得看代码。以后有时间,我会和大家一起分析代码。先到这吧,谢谢。
相关文章推荐
- PHP AJAX JSONP实现跨域请求使用实例
- 利用JQuery jsonp实现Ajax跨域请求 .Net 的*.handler 和 WebService,返回json数据
- 浅谈linux 下,利用Nginx服务器代理实现ajax跨域请求。
- WebApi 自定义过滤器实现支持AJAX跨域的请求
- Apache 实现AJAX跨域请求
- Ajax-07 基于Ajax实现跨域请求
- 使用$.getJSON实现跨域ajax请求
- 10、JSONP实现Ajax的跨域请求
- 用Dojo实现Ajax请求:XH“.NET研究”R、跨域、及其他
- 一起谈.NET技术,用Dojo实现Ajax请求:XHR、跨域、及其他
- 服务端配置实现AJAX跨域请求
- Springboot 处理跨域请求(AJAX、VUE)
- HTML5:使用postMessage实现Ajax跨域请求
- 用Dojo实现Ajax请求:XHR、跨域、及其他
- 用反向代理nginx proxy_pass配置解决ie8 ajax请求被拦截问题 ie8用nginx代理实现跨域请求访问 nginx405正向代理request_uri
- Vue-resource实现ajax请求和跨域请求示例
- 关于JQuery 中$.ajax函数利用jsonp实现Ajax跨域请求ASP.NET的WebService成功获取数据的案例
- JavaScript之Ajax-7 Ajax跨域请求(Ajax跨域概述、Ajax跨域实现)
- 利用JQuery实现更简单的Ajax跨域请求
- jQuery中Ajax+Spring MVC实现跨域请求