Spring boot 跨域
跨域的由来
跨域(Cross-Origin)是指在Web开发中,一个网页的源(源指协议、主机和端口的组合)试图访问另一个网页的资源。这涉及到在不同域之间进行网络请求,如从一个域的网页向另一个域的服务器发送HTTP请求。
Web浏览器的同源策略(Same-Origin Policy)是一个重要的Web安全机制,它限制了一个网页从一个不同源的服务器上加载资源,以防止潜在的安全漏洞。同源策略要求网页只能加载来自相同源的资源,即协议、域名和端口必须完全相同。
跨域的解决之道
就我所知道的,有采用js加载,配置vue的代理服务器,以及后端配置,js不曾使用过,vue的倒是使用过几次,还算是比较好用,一直不曾尝试过使用后端来解决
Spring 跨域处理
1、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2、配置跨域规则
-
方法跨域
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MyController { @CrossOrigin(origins = "http://localhost:8080") // 允许来自特定源的跨域请求 @GetMapping("/example") public String example() { return "This is an example response."; } }
-
全局跨域
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class CorsConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { // 允许来自http://localhost:8080的跨域请求 registry.addMapping("/api/**") .allowedOrigins("http://localhost:8080") .allowedMethods("GET", "POST"); } }; } }
在这个配置中,
addMapping
指定了哪些端点应用CORS规则,allowedOrigins
指定了允许的来源,allowedMethods
指定了允许的HTTP方法。 -
允许跨域
这里将配置规则给改成*即刻,但是这会使得任何地址都能访问,在生产环境时需要注意,可能会导致安全问题。
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class CorsConfig { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { // 允许所有来源,允许所有HTTP方法 registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("*"); } }; } }