springboot的跨域

https://www.cnblogs.com/520playboy/p/7306008.html

1、对于前后端分离的项目来说,如果前端项目与后端项目部署在两个不同的域下,那么势必会引起跨域问题的出现。

针对跨域问题,我们可能第一个想到的解决方案就是jsonp,并且以前处理跨域问题我基本也是这么处理。

但是jsonp方式也同样有不足,不管是对于前端还是后端来说,写法与我们平常的ajax写法不同,同样后端也需要作出相应的更改。并且,jsonp方式只能通过get请求方式来传递参数,当然也还有其它的不足之处,针对于此,我并没有急着使用jsonp的方式来解决跨域问题,去网上找寻其它方式,也就是本文主要所要讲的,在springboot中通过cors协议解决跨域问题。

2、Cors协议

H5中的新特性:Cross-Origin Resource Sharing(跨域资源共享)。通过它,我们的开发者(主要指后端开发者)可以决定资源是否能被跨域访问。

cors是一个w3c标准,它允许浏览器(目前ie8以下还不能被支持)像我们不同源的服务器发出xmlHttpRequest请求,我们可以继续使用ajax进行请求访问。

具体关于cors协议的文章 ,可以参考http://www.ruanyifeng.com/blog/2016/04/cors.html 这篇文章,讲的相当不错。

3、在springboot中如何通过cors协议解决跨域问题

springmvc4.2版本增加了对cors的支持。

目前我所做的项目基本都是springboot进行开发,所以我这里贴下在springboot中的使用。

@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter{

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }

可以在addMapping中配置我们的路径。/**代表所有路径。

当然也可以修改其它属性

@Configuration
public class MyWebAppConfigurer extends WebMvcConfigurerAdapter{

    @Override
    public void addCorsMappings(CorsRegistry registry) {
           registry.addMapping("/api/**")
           .allowedOrigins("http://192.168.1.97")
           .allowedMethods("GET", "POST")
           .allowCredentials(false).maxAge(3600);
    }

以上两种,都是针对全局配置,如果你想做到更细致也可以使用@CrossOrigin这个注解在controller类中使用。

@CrossOrigin(origins = "http://192.168.1.97:8080", maxAge = 3600)
@RequestMapping("rest_index")
@RestController
public class IndexController{

这样就可以指定该controller中所有方法都能处理来自http:19.168.1.97:8080中的请求。

分类: spring cloud

原文地址:https://www.cnblogs.com/fengli9998/p/8989410.html

时间: 2024-08-02 06:32:47

springboot的跨域的相关文章

Springboot实现跨域请求

之所以需要用到跨域请求,目的在于现在的Java项目,几乎基本上都前后端分离,除一些较老的维护项目外(通常是单体或者是maven多模块形式,不过本质上还是将前端放在webapps下). SpringBoot实现跨域其实和Spring是一样,区别不大,如果要说区别的话,Spring需要在对应的xml文件中配置bean,而SpringBoot则通过注解的方式. Spring配置跨域请求可参考我的这篇文章:https://www.cnblogs.com/youcong/p/9676433.html 示例

SpringBoot解决跨域请求拦截

前言 同源策略:判断是否是同源的,主要看这三点,协议,ip,端口. 同源策略就是浏览器出于网站安全性的考虑,限制不同源之间的资源相互访问的一种政策. 比如在域名https://www.baidu.com下,脚本不能够访问https://www.sina.com源下的资源,否则将会被浏览器拦截. 注意两点: 1.必须是脚本请求,比如AJAX请求. 但是如下情况不会产生跨域拦截 <img src="xxx"/> <a href='xxx"> </a&

SpringBoot多跨域请求的支持(JSONP)

在我们做项目的过程中,有可能会遇到跨域请求,所以需要我们自己组装支持跨域请求的JSONP数据,而在4.1版本以后的SpringMVC中,为我们提供了一个AbstractJsonpResponseBodyAdvice的类用来支持jsonp的数据(SpringBoot接收解析web请求是依赖于SpringMVC实现的).下面我们就看一下怎么用AbstractJsonpResponseBodyAdvice来支持跨域请求. 使用AbstractJsonpResponseBodyAdvice来支持跨域请求

springboot解决跨域问题(Cors)

1.对于前后端分离的项目来说,如果前端项目与后端项目部署在两个不同的域下,那么势必会引起跨域问题的出现. 针对跨域问题,我们可能第一个想到的解决方案就是jsonp,并且以前处理跨域问题我基本也是这么处理. 但是jsonp方式也同样有不足,不管是对于前端还是后端来说,写法与我们平常的ajax写法不同,同样后端也需要作出相应的更改.并且,jsonp方式只能通过get请求方式来传递参数,当然也还有其它的不足之处, jQuery ajax方式以jsonp类型发起跨域请求,其原理跟<script>脚本请

SpringBoot+Ajax跨域安全问题及解决方法

〇.遇到跨域安全问题 在学习SpringBoot过程中,遇到了这样一个问题.当时用SpringBoot开发Rest服务接口,然后用Ajax请求获取数据,来实现前后端分离.但是在前端请求时,始终不能显示应该显示的数据.从浏览器的控制台报错来看(如下图),应该是遇到了跨域安全的问题. 一.为什么会出现跨域安全问题? 要解决这个问题,首先得知道为什么会出现这个问题.通过了解,出现跨域安全问题的原因一般是以下三个问题:浏览器收到了正确的返回数据但是做出了限制.发出去的请求是XMLHttpRequest请

SpringBoot设置跨域的几种方式

什么是跨域? 浏览器从一个域名的网页去请求另一个域名的资源时,域名.端口.协议任一不同,都是跨域 原因: 由于浏览器的同源策略, 即a网站只能访问a网站的内容,不能访问b网站的内容. 注意: 跨域问题只存在于浏览器,也就是说当你的前端页面访问后端简单请求的接口时,返回值是有的,只是服务器没有在请求头指定跨域的信息,所以浏览器自动把返回值给"屏蔽了". 经过上面的了解,可以得出几个解决跨域的方法(不考虑前端实现): 1.服务端指定跨域信息 2.在web页面与服务器之间加一层服务指定跨域信

springboot 解决跨域问题

因springboot框架通常用于前后端分离项目,需配置后台允许跨域访问,配置类如下,将该类加入工程中即可. import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.

springboot允许跨域访问

前后端开发学习中,vue里面需要跨域访问后台数据 可在springboot后台里面添加个配置类即可: package com.springboottest.config; import org.springframework.beans.factory.annotation.Configurable; import org.springframework.context.annotation.Configuration; import org.springframework.web.servle

springboot解决跨域访问

/** * 跨域设置 * @Version 1.0.0 * @Description */ @Configuration public class CorsConfig extends WebMvcConfigurationSupport { @Override protected void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*")