摘要:本文主要介绍了在SpringBoot中使用CORS(跨域源资源共享)实现跨域操作,CORS是以W3C为标准的一份浏览器技术的规范。
项目创建
首先创建两个普通的SpringBoot项目,第一个命名为provider提供服务,第二个命名为consumer消费服务,第一个配置端口为8080,第二个配置配置为8081。
首先在provider上创建一个HelloController,提供两个hello接口,一个get,一个put。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| package com.example.cors1;
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RestController;
@RestController @CrossOrigin(origins = "http://localhost:8081") public class HelloConroller { @GetMapping("/hello") public String hello() { return "hello cors1"; }
@PutMapping("/putting") public String putting(){ return "putting"; } }
|
那么如果我们希望进行全局配置呢?我们可以创建一个WebMvcConfig来配置允许访问的域以及请求方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package com.example.cors1;
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 WebMvcConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("http://localhost:8081") .allowedHeaders("*") .allowedMethods("*") .maxAge(30 * 1000); } }
|
然后在costumer中创建一个请求页面indx.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="jquery-3.4.1.js"></script> </head> <body> <div id="app"></div> <input type="button" value="GET" onclick="getData()"> <input type="button" value="PUT" onclick="putData()"> <script> function getData() { $.get('http://localhost:8080/hello', function (msg) { $("#app").html(msg); }); } function putData() { $.ajax({ type: 'put', url: 'http://localhost:8080/putting', success: function (msg) { $("#app").html(msg); } }); } </script> </body> </html>
|
运行两个项目,在index.html点击按钮即可跨域发送请求了。