@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
@PostMapping("/hello")
public String hello2() {
return "post hello";
}
}
在 consumer 的 resources/static 目錄下建立一個 html 檔案,發送一個簡單的 ajax 請求,如下:
<div id="app"></div>
<input type="button" onclick="btnClick()" value="get_button">
<input type="button" onclick="btnClick2()" value="post_button">
<script>
function btnClick() {
$.get('http://localhost:8080/hello', function (msg) {
$("#app").html(msg);
});
}
function btnClick2() {
$.post('http://localhost:8080/hello', function (msg) {
$("#app").html(msg);
});
}
</script>
分别啟動兩個項目,發送請求按鈕,觀察浏覽器控制台如下:
Access to XMLHttpRequest at 'http://localhost:8080/hello' from origin 'http://localhost:8081' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
由于同源政策的限制,請求無法發送成功。
解決方案
使用 CORS 可以在前端代碼不做任何修改的情況下,實作跨域。在 provider 中配置。
@CrossOrigin 注解配置(不推薦)
注解配置某一個方法接受某一個域的請求,如下:
@RestController
public class HelloController {
@CrossOrigin(value = "http://localhost:8081",maxAge = 3600) //origin="*"代表所有域名都可通路 //maxAge飛行前響應的緩存持續時間的最大年齡,簡單來說就是Cookie的有效期 機關為秒
//若maxAge是負數,則代表為臨時Cookie,不會被持久化,Cookie資訊儲存在浏覽器記憶體中,浏覽器關閉Cookie就消失
@GetMapping("/hello")
public String hello() {
return "hello";
}
@CrossOrigin(value = "http://localhost:8081")
@PostMapping("/hello")
public String hello2() {
return "post hello";
}
}