SpringBoot 應用跨域訪問解決方案

2021-10-05 05:38:19 字數 2174 閱讀 7857

說到跨域訪問,必須先解釋乙個名詞:同源策略。所謂同源策略就是在瀏覽器端出於安全考量,向服務端發起請求必須滿足:協議相同、host(ip)相同、埠相同的條件,否則訪問將被禁止,該訪問也就被稱為跨域訪問。

雖然跨域訪問被禁止之後,可以在一定程度上提高了應用的安全性,但也為開發帶來了一定的麻煩。比如:我們開發乙個前後端分離的易用,頁面及js部署在乙個主機的nginx服務中,後端介面部署在乙個tomcat應用容器中,當前端向後端發起請求的時候一定是不符合同源策略的,也就無法訪問。那麼我們如何解決這個問題?就是本文需要向大家說明的內容。

雖然瀏覽器對於不符合同源策略的訪問是禁止的,但是仍然存在例外的情況,如以下資源引用的標籤不受同源策略的限制:

除了基於html本身的特性實現跨域訪問,我們還可以使用jsonp、window的postmessage實現跨域訪問。這些都是前端實現跨域訪問的方式。

實際上對跨域訪問的支援在服務端實現起來更加容易,最常用的方法就是通過**的方式,如:

其實實現**跨域的邏輯非常簡單,就是在不同的資源服務:js資源、html資源、css資源、介面資料資源服務的前端搭建乙個中間層,所有的瀏覽器及客戶端訪問都通過****。所以在瀏覽器、客戶端看來,它們訪問的都是同乙個ip、同乙個埠的資源,從而符合同源策略實現跨域訪問。

跨域資源共享(cors):通過修改http協議header的方式,實現跨域。說的簡單點就是,通過設定http的響應頭資訊,告知瀏覽器哪些情況在不符合同源策略的條件下也可以跨域訪問,瀏覽器通過解析http協議中的header執行具體判斷。具體的header如下:

cros跨域常用header

為大家介紹四種實現cors的方法,兩種是全域性配置,兩種是區域性介面生效的配置。一般來說,springboot專案採用其中一種方式實現cors即可。

或者簡潔的全域性

@restcontroller

@crossorigin

public

class

deptcontroller

這種方式不建議在springboot專案中使用,純粹是找事做

在springboot專案外隨便定義乙個web專案,傳送乙個web請求,具體技術可以使用jquery的ajax、fetch、axios等。以下是以jquery封裝的ajax為例請求驗證的核心**:

$.

ajax(,

success: function (data)

, error: function (data)

})

測試可以發現:

在沒有進行跨域請求時會出現網路請求200,同時能檢視到資料:

springboot跨域配置

1.springboot它的好處就是它強大的自動配置,使我們能夠快速的搭建乙個專案。而springboot主要的設計目的是為微服務而誕生的。在前後端分離架構中,前端請求後端介面必然存在跨域,後端只需要提供服務即可。2.springboot配置跨域 編寫cors配置類 import org.sprin...

spring boot跨域問題

方式一 直接寫乙個 配置類 其他 不變 configuration public class orginconfig bean public corsfilter corsfilter 方式二 直接寫乙個 配置類 configuration public class weboriginconfig ...

SpringBoot配置跨域

springboot vue模式 前端傳送請求到後端,header中的token資訊一直是丟失狀態 當時的後端設定模式如下 configuration enablewebmvc public class springmvcconfig implements webmvcconfigurer para...