一,什么是CORS?
- 協議相同
- 域名相同
- 端口相同

可以看到其中的:Access-Control-Allow-Origin: http://127.0.0.1:1999

4,在生產環境中要注意的地方:
互聯網搜索到的很多例子直接允許所有的域訪問所有的路徑,
這是絕對不能做的,
因為在互聯網上被這樣訪問會引發安全問題
說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest
對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/
說明:作者:劉宏締 郵箱: 371125307@qq.com
二,演示項目的說明
https://github.com/liuhongdi/corsconfig

三,java代碼說明
1,CorsConfig.java
@Configuration public class CorsConfig implements WebMvcConfigurer { //指定允許跨域的多個域 private static final String[] ALLOWED_ORIGINS = {"http://www.baidu.com","http://127.0.0.1:81","https://blog.csdn.net"}; @Bean public WebMvcConfigurer corsConfigurer() { //添加跨域的cors配置 return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/goods/**"). //可以被跨域的路徑,/**表示無限制, allowedOrigins(ALLOWED_ORIGINS). //允許跨域的域名,如果值為*,則表示允許任何域名使用 allowedMethods("*"). //允許任何方法,值可以為: "GET", "POST" ... allowedHeaders("*"). //允許任何請求頭 allowCredentials(true). //允許帶cookie信息 exposedHeaders(HttpHeaders.SET_COOKIE).maxAge(3600L); //maxAge(3600):表示3600秒內,不需要再發送預檢驗請求,是結果可以緩存的時長 } }; } }
說明:用addCorsMapping方法添加對跨域路徑/允許跨域的域名等的規則
2,HomeController.java
@RestController @RequestMapping("/home") public class HomeController { //允許跨域多個值 @CrossOrigin(origins = {"http://127.0.0.1:1999","http://cas.baidu.com","http://do.baidu.com"},maxAge = 3600) @GetMapping @RequestMapping("/home") public String home() { return "this is /home/home"; } //允許跨域,只有一個域 //只寫@CrossOrigin 表示允許所有域訪問 @CrossOrigin("http://127.0.0.1:1999") @GetMapping @RequestMapping("/index") public String index() { return "this is /home/index"; } }
演示用@CrossOrigin注解為指定的方法或類來指定跨域的規則
3,GoodsController.java
@RestController @RequestMapping("/goods") public class GoodsController { @GetMapping @RequestMapping("/one") public String one() { return "this is /goods/one"; } }
供測試用,CorsConfig.java中配置了它的跨域規則
四, javascript代碼說明
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title >標題</title> <meta charset="utf-8" /> <script type="text/javascript" language="JavaScript" src="/jquery-1.6.2.min.js"></script> </head> <body> <div id="content" style="width:800px;"> <div style="width:250px;float:left;font-size: 16px;" ></div> <div style="width:550px;float:left;"> <!--====================main begin=====================--> <a href="javascript:get_home()" >訪問8080:/home/home</a><br/> <a href="javascript:get_goods()" >訪問8080:/goods/one</a> <!--====================main end=====================--> </div> </div> <script> //訪問8080:/goods/one function get_goods(){ $.ajax({ type:"GET", url:"http://127.0.0.1:8080/goods/one", //返回數據的格式 datatype: "text",//"xml", "html", "script", "json", "jsonp", "text". processData: false, contentType: false, //成功返回之后調用的函數 success:function(data){ alert(data); }, //調用執行后調用的函數 complete: function(XMLHttpRequest, textStatus){ }, //調用出錯執行的函數 error:function(jqXHR,textStatus,errorThrown){ console.log(jqXHR); console.log(textStatus); console.log(errorThrown); } }); } //訪問8080:/home/home function get_home(){ $.ajax({ type:"GET", url:"http://127.0.0.1:8080/home/home", //返回數據的格式 datatype: "text",//"xml", "html", "script", "json", "jsonp", "text". processData: false, contentType: false, //成功返回之后調用的函數 success:function(data){ alert(data); }, //調用執行后調用的函數 complete: function(XMLHttpRequest, textStatus){ }, //調用出錯執行的函數 error:function(jqXHR,textStatus,errorThrown){ console.log(jqXHR); console.log(textStatus); console.log(errorThrown); } }); } </script> </body> </html>
說明:把這個頁面放到本地端口為81的域下
2,page1999.html
<html xmlns="http://www.w3.org/1999/xhtml"> <head > <title >標題</title> <meta charset="utf-8" /> <script type="text/javascript" language="JavaScript" src="/jquery-1.6.2.min.js"></script> </head> <body> <div id="content" style="width:800px;"> <div style="width:250px;float:left;font-size: 16px;" ></div> <div style="width:550px;float:left;"> <!--====================main begin=====================--> <a href="javascript:get_index()" >訪問8080:/home/index</a><br/> <a href="javascript:get_home()" >訪問8080:/home/home</a><br/> <a href="javascript:get_goods()" >訪問8080:/goods/one</a> <!--====================main end=====================--> </div> </div> <script> //訪問8080:/goods/one function get_goods(){ $.ajax({ type:"GET", url:"http://127.0.0.1:8080/goods/one", //返回數據的格式 datatype: "text",//"xml", "html", "script", "json", "jsonp", "text". processData: false, contentType: false, //成功返回之后調用的函數 success:function(data){ alert(data); }, //調用執行后調用的函數 complete: function(XMLHttpRequest, textStatus){ }, //調用出錯執行的函數 error:function(jqXHR,textStatus,errorThrown){ console.log(jqXHR); console.log(textStatus); console.log(errorThrown); } }); } //訪問8080:/home/index function get_index(){ $.ajax({ type:"GET", url:"http://127.0.0.1:8080/home/index", //返回數據的格式 datatype: "text",//"xml", "html", "script", "json", "jsonp", "text". processData: false, contentType: false, //成功返回之后調用的函數 success:function(data){ alert(data); }, //調用執行后調用的函數 complete: function(XMLHttpRequest, textStatus){ }, //調用出錯執行的函數 error:function(jqXHR,textStatus,errorThrown){ console.log(jqXHR); console.log(textStatus); console.log(errorThrown); } }); } //訪問8080:/home/home function get_home(){ $.ajax({ type:"GET", url:"http://127.0.0.1:8080/home/home", //返回數據的格式 datatype: "text",//"xml", "html", "script", "json", "jsonp", "text". processData: false, contentType: false, //成功返回之后調用的函數 success:function(data){ alert(data); }, //調用執行后調用的函數 complete: function(XMLHttpRequest, textStatus){ }, //調用出錯執行的函數 error:function(jqXHR,textStatus,errorThrown){ console.log(jqXHR); console.log(textStatus); console.log(errorThrown); } }); } </script> </body> </html>
說明:把這個頁面放到本地端口為1999的域下
五,效果測試
http://127.0.0.1:1999/page1999.html
效果:
測試可以發現:
/home/index,/home/home允許訪問,
而/goods/one不允許訪問,因為沒有允許從127.0.0.1:1999訪問到8080的java項目的規則
2,訪問:
http://127.0.0.1:81/page81.html
效果:
可以測試發現:
訪問到 /goods/one沒有問題,
訪問到/home/home會報錯,
因為沒有允許從127.0.0.1:81訪問到8080的java項目的規則
六,查看spring boot版本
. ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v2.3.2.RELEASE)