一、前言
在現代web應用中,跨域訪問是很常見的場景,例如前後端分離的項目中,前端使用ajax請求後端RESTful API時,由於請求是從不同的域名下發出的,就會涉及到跨域問題。如果不做特殊處理,很可能會導致請求失敗。
Spring Boot是一套快速開發框架,為了方便開發者解決跨域問題,提供了一種簡單的解決方案。本文將圍繞Spring Boot實現跨域訪問控制的方法展開講解,幫助讀者快速解決跨域問題。
二、什麼是跨域訪問
跨域訪問是指在瀏覽器中,一個網頁的腳本試圖訪問另一個頁面中的資源。這裡的“跨域”指的是“源”或“域名”,即兩個網頁使用的域名不同。如果兩個域名相同,就不會存在跨域問題。遇到跨域問題,瀏覽器會拋出一個異常。
在JavaScript中,由於瀏覽器的同源策略(Same Origin Policy),只有在同一域名、端口和協議下的網頁才能相互訪問對方的數據。在跨域場景下,這種限制就會被啟用,因此只有在目標服務器允許跨域訪問時,才能在當前網頁中進行資源訪問。
三、Spring Boot跨域訪問控制方法
為了實現跨域訪問,Spring Boot提供了CorsFilter,開發者只需要在Spring Boot的配置文件(application.yml或application.properties)中設置以下屬性:
spring:
cors:
allowed-origins: "*", # 允許所有來源訪問,如果需要特定的來源訪問,可以指定具體的域名。
allowed-methods: "*", # 允許所有請求方法訪問,如果需要特定的請求方法,可以指定。
allowed-headers: "*", # 允許所有請求頭訪問,如果需要特定的請求頭,可以指定。
allow-credentials: true # 允許攜帶cookie訪問,需要在ajax中將withCredentials設置為true。
注意,這裡需要將配置文件中的屬性設置在spring.cors下,表示為跨域訪問提供支持。
四、實際代碼示例
以下代碼演示了如何在Spring Boot中使用CorsFilter解決跨域訪問問題。
1、創建一個Spring Boot項目,添加Maven依賴:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2、在application.yml或application.properties中配置CorsFilter:
spring:
cors:
allowed-origins: "*"
allowed-methods: "*"
allowed-headers: "*"
allow-credentials: true
3、創建一個RestController,在其中添加一個返回Json數據的接口:
@RestController
public class DemoController {
@RequestMapping("/demo")
public Map demo() {
Map result = new HashMap();
result.put("msg", "Hello, world!");
return result;
}
}
4、在前端使用ajax請求接口數據:
<script>
$.ajax({
url: "http://localhost:8080/demo",
type: "get",
dataType: "json",
xhrFields: {
withCredentials: true
},
success: function(data) {
alert("請求成功,返回數據:" + JSON.stringify(data));
},
error: function() {
alert("請求失敗!");
}
});
</script>
使用以上代碼,即可在瀏覽器中發送一個跨域請求,並成功獲取到數據。
五、總結
Spring Boot提供了CorsFilter這個方便的跨域訪問解決方案。只需要在配置文件中設定相關屬性,就能夠輕鬆地應對跨域問題。同時,在前端開發中需要注意使用xhrFields將withCredentials設置為true,以允許攜帶cookie進行跨站訪問。
原創文章,作者:RIOM,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/144987.html