springboot跨域過濾器fetch react Response to preflight request doesn‘t pass access control check問題
前言
瀏覽器出于安全考慮,限制了JS發(fā)起跨站請求,使用XHR對(duì)象發(fā)起請求必須遵循同源策略(SOP:Same Origin Policy),跨站請求會(huì)被瀏覽器阻止,這對(duì)開發(fā)者來說是很痛苦的一件事,尤其是要開發(fā)前后端分離的應(yīng)用時(shí)。
在現(xiàn)代化的Web開發(fā)中,不同網(wǎng)絡(luò)環(huán)境下的資源數(shù)據(jù)共享越來越普遍,同源策略可以說是在一定程度上限制了Web API的發(fā)展。
簡單的說,CORS就是為了請求能夠安全跨域而生的。至于CORS的安全性研究,本文不做探討。
CORS淺述
名詞解釋
跨域資源共享(Cross-Origin Resource Sharing)
概念
是一種跨域機(jī)制、規(guī)范、標(biāo)準(zhǔn),怎么叫都一樣,但是這套標(biāo)準(zhǔn)是針對(duì)服務(wù)端的,而瀏覽器端只要支持HTML5即可。
作用
可以讓服務(wù)端決定哪些請求源可以進(jìn)來拿數(shù)據(jù),所以服務(wù)端起主導(dǎo)作用(所以出了事找后臺(tái)程序猿,無關(guān)前端^ ^)
常用場景
前后端完全分離的應(yīng)用
服務(wù)端未允許跨域
如何解決
package pers.yiji.YiJiClientServer.util; import org.springframework.boot.web.servlet.FilterRegistrationBean; 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 CorsConfig { /** * cors support * @return */ @Bean public FilterRegistrationBean corsFilter() { // 注冊CORS過濾器 UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); // 是否支持安全證書 config.addAllowedOrigin("*"); // 允許任何域名使用 config.addAllowedHeader("*"); // 允許任何頭 config.addAllowedMethod("*"); // 允許任何方法(post、get等) // 預(yù)檢請求的有效期,單位為秒。 // config.setMaxAge(3600L); source.registerCorsConfiguration("/**", config); FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); bean.setOrder(0); return bean; } }
具體每句話的意思基本上注釋都有寫。
主要就是為了注冊一個(gè)過濾器,這里是基本上允許所有的請求,在特殊的場景可以使用域名控制等。
config.addAllowedOrigin("*"); // 允許任何域名使用(*可以換成特定的域名)
結(jié)果
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot 使用 logback、logstash、ELK 記錄日志文件的方法
這篇文章主要介紹了Spring Boot 使用 logback、logstash、ELK 記錄日志文件的思路詳解,文中給大家提到了logback 取代 log4j的理由,需要的朋友可以參考下2017-12-12java中對(duì)Redis的緩存進(jìn)行操作的示例代碼
本篇文章主要介紹了java中對(duì)Redis的緩存進(jìn)行操作的示例代碼,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08Java?Excel?Poi字體顏色自定義設(shè)置代碼
最近項(xiàng)目使用POI按模板導(dǎo)出Excel,需要設(shè)置單元格的字體為紅色,下面這篇文章主要給大家介紹了關(guān)于Java?Excel?Poi字體顏色自定義設(shè)置的相關(guān)資料,需要的朋友可以參考下2024-01-01詳解Springboot之整合JDBCTemplate配置多數(shù)據(jù)源
這篇文章主要介紹了詳解Springboot之整合JDBCTemplate配置多數(shù)據(jù)源,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04mybatis group by substr函數(shù)傳參報(bào)錯(cuò)的解決
這篇文章主要介紹了mybatis group by substr函數(shù)傳參報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01