SpringBoot前后端分離跨域問(wèn)題:狀態(tài)碼403拒絕訪問(wèn)解決辦法
前言
最近在寫(xiě)和同學(xué)一起做一個(gè)前后端分離的項(xiàng)目,今日開(kāi)始對(duì)接口準(zhǔn)備進(jìn)行 登錄注冊(cè) 的時(shí)候發(fā)現(xiàn)前端在發(fā)起請(qǐng)求后,抓包發(fā)現(xiàn)后端返回了一個(gè)403的錯(cuò)誤,解決了很久發(fā)現(xiàn)是【跨域問(wèn)題】,第一次遇到,便作此記錄?
異常描述
在后端服務(wù)器啟動(dòng)后,前端頁(yè)面也起了起來(lái),然后點(diǎn)擊這個(gè)【登錄】按鈕準(zhǔn)備向后端發(fā)起POST請(qǐng)求時(shí)卻沒(méi)有任何的反應(yīng),便覺(jué)得很疑惑

于是來(lái)到后端的控制臺(tái)觀察是否有什么異常,但是也發(fā)現(xiàn)并沒(méi)有任何的異常Exception顯示出來(lái),就覺(jué)得很奇怪(?∀?(?∀?(?∀?*)

抓包排查
那么這個(gè)時(shí)候:提升自己的機(jī)會(huì)就又來(lái)了,我便準(zhǔn)備去查看網(wǎng)頁(yè)控制臺(tái)并抓包進(jìn)行觀察
再次打開(kāi)這個(gè)網(wǎng)頁(yè)發(fā)送請(qǐng)求的時(shí)候便發(fā)現(xiàn),出現(xiàn)了兩個(gè) url,仔細(xì)觀察發(fā)現(xiàn)端口號(hào)是不一樣的,一個(gè)是我服務(wù)器啟動(dòng)的端口,為8080,另一個(gè)呢問(wèn)了前端的同學(xué)說(shuō)是它占用的這個(gè)端口號(hào),為5173
那么兩個(gè)端口號(hào)都不一致前端發(fā)起請(qǐng)求后端無(wú)法接受到確實(shí)是可以解釋得通的

接著仔細(xì)查看這里的英文便可以看到前面的這個(gè)localhost:5173已經(jīng)被 CORS策略 給拒絕了,說(shuō):不存在“Access Control Allow Origin”這樣的標(biāo)頭,那讀到這里我又可以進(jìn)一步斷定應(yīng)該是【訪問(wèn)被拒絕】了,但是還無(wú)法做出完全的肯定

此時(shí)我又去進(jìn)行抓包確認(rèn),連著點(diǎn)了三次登錄按鈕,并通過(guò)【Fiddler】進(jìn)行抓包便可以觀察到很醒目的三個(gè)403,那么清楚HTTP協(xié)議的狀態(tài)碼的同學(xué)便可以清楚
【403狀態(tài)碼】:表示訪問(wèn)被拒絕,有的頁(yè)面通常需要用戶具有一定的權(quán)限才能訪問(wèn)(登陸后才能訪問(wèn))

例如::查看碼云的私有倉(cāng)庫(kù), 如果不登陸, 就會(huì)出現(xiàn)
403

Spring Boot解決跨域問(wèn)題
那么此時(shí),我們便可以在后端通過(guò)SpringBoot去寫(xiě)一個(gè)配置文件,以指定哪個(gè)端口是可以進(jìn)行跨域訪問(wèn)的
以下是相關(guān)的代碼,只需要在config包(一般放配置文件)下添加一個(gè)這樣的類即可,因?yàn)樗怯嘘P(guān)一些配置,所以要加上@Configuration注解
package com.example.demo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class MyCorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.addAllowedOrigin(http"://localhost:5173"); // 允許誰(shuí)跨域
configuration.setAllowCredentials(true); // 傳cookie
configuration.addAllowedMethod("*"); // 允許哪些方法跨域 post/get
configuration.addAllowedHeader("*"); // 允許哪些頭信息
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration); // 攔截一切請(qǐng)求
return new CorsFilter(source);
}
}
最主要的還是配置下面的這一句,將端口號(hào)為5173的口子放開(kāi),這樣任何的HTTP請(qǐng)求就可以進(jìn)來(lái)了
configuration.addAllowedOrigin("http://localhost:5173"); // 允許誰(shuí)跨域
此時(shí)我們?cè)偃タ吹骄涂梢园l(fā)現(xiàn)前后端可以進(jìn)行交互了,只是因著其他的原因讓以至于后端返回了一些錯(cuò)誤的信息給到前端


總結(jié)
到此這篇關(guān)于SpringBoot前后端分離跨域問(wèn)題:狀態(tài)碼403拒絕訪問(wèn)解決辦法的文章就介紹到這了,更多相關(guān)SpringBoot狀態(tài)碼403拒絕訪問(wèn)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java設(shè)計(jì)模式之簡(jiǎn)單工廠模式簡(jiǎn)述
這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之簡(jiǎn)單工廠模式,簡(jiǎn)單工廠模式的實(shí)質(zhì)是由一個(gè)工廠類根據(jù)傳入的參數(shù),動(dòng)態(tài)決定應(yīng)該創(chuàng)建哪一個(gè)產(chǎn)品類的實(shí)例,感興趣的小伙伴們可以參考一下2016-08-08
Java中使用json與前臺(tái)Ajax數(shù)據(jù)交互的方法
這篇文章主要為大家詳細(xì)介紹了Java中使用json與前臺(tái)Ajax數(shù)據(jù)交互的方法,分享Ajax獲取顯示Json數(shù)據(jù)的一種方法,感興趣的小伙伴們可以參考一下2016-06-06
Java使用Spire.PDF實(shí)現(xiàn)高效壓縮PDF文件
這篇文章主要介紹了過(guò)大的文件體積常引發(fā)傳輸卡頓、加載緩慢等問(wèn)題,本文將解析?Spire.PDF?for?Java?的?PDF?壓縮方案,有需要的可以了解下2025-08-08
Java 隊(duì)列 Queue 用法實(shí)例詳解
本文實(shí)例講述了Java內(nèi)置隊(duì)列類Queue用法,分享給大家供大家參考2017-04-04
Jenkins系統(tǒng)如何進(jìn)行數(shù)據(jù)備份
隨著我們的長(zhǎng)期使用,Jenkins系統(tǒng)中的內(nèi)容會(huì)越來(lái)越多,特別是一些配置相關(guān)的東西,不能有任何丟失。這個(gè)時(shí)候我們就需要定期備份我們的Jenkins系統(tǒng),避免一些誤操作不小心刪除了某些重要文件,本文就將介紹下Jenkins系統(tǒng)如何進(jìn)行數(shù)據(jù)備份2021-06-06
SpringBoot項(xiàng)目實(shí)現(xiàn)統(tǒng)一異常處理的最佳方案
在前后端分離的項(xiàng)目開(kāi)發(fā)過(guò)程中,我們通常會(huì)對(duì)數(shù)據(jù)返回格式進(jìn)行統(tǒng)一的處理,這樣可以方便前端人員取數(shù)據(jù),后端發(fā)生異常時(shí)同樣會(huì)使用此格式將異常信息返回給前端,本文介紹了如何在SpringBoot項(xiàng)目中實(shí)現(xiàn)統(tǒng)一異常處理,如有錯(cuò)誤,還望批評(píng)指正2024-02-02

