SpringBoot解決跨域
原文連結:https://www.cnblogs.com/antLaddie/p/14751540.html
SpringBoot解決跨域問題
五種解決方式: ①:返回新的CorsFilter ②:重寫WebMvcConfigurer ③:使用註解@CrossOrigin ④:手動設定響應頭(HttpServletResponse)參考第一章第四節
注意: CorFilter / WebMvConfigurer / @CrossOrigin 需要 SpringMVC 4.2以上版本才支援,對應springBoot 1.3版本以上 上面前兩種方式屬於全域性 CORS 配置,後兩種屬於區域性 CORS配置。如果使用了局部跨域是會覆蓋全域性跨域的規則,
所以可以通過 @CrossOrigin 註解來進行細粒度更高的跨域資源控制。 其實無論哪種方案,最終目的都是修改響應頭,向響應頭中新增瀏覽器所要求的資料,進而實現跨域
1:配置CorsFilter(全域性跨域)
import org.springframework.boot.SpringBootConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; /** * @Author AnHui_XiaoYang * @Email [email protected] * @Date 2021/5/10 17:07 * @Description */ @SpringBootConfiguration public class WebGlobalConfig { @Bean public CorsFilter corsFilter() { //建立CorsConfiguration物件後新增配置 CorsConfiguration config = new CorsConfiguration(); //設定放行哪些原始域 config.addAllowedOrigin("*");//放行哪些原始請求頭部資訊 config.addAllowedHeader("*"); //暴露哪些頭部資訊 config.addExposedHeader("*"); //放行哪些請求方式 config.addAllowedMethod("GET"); //get config.addAllowedMethod("PUT"); //put config.addAllowedMethod("POST"); //post config.addAllowedMethod("DELETE"); //delete //corsConfig.addAllowedMethod("*"); //放行全部請求 //是否傳送Cookie config.setAllowCredentials(true); //2. 新增對映路徑 UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource(); corsConfigurationSource.registerCorsConfiguration("/**", config); //返回CorsFilter return new CorsFilter(corsConfigurationSource); } }
如果你使用的是高版本SpringBoot2.4.4則需要改動一下,否則後臺報錯
java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a set of origins, list them explicitly or consider using "allowedOriginPatterns" instead.
at org.springframework.web.cors.CorsConfiguration.validateAllowCredentials(CorsConfiguration.java:453) ~[spring-web-5.3.6.jar:5.3.6]
當allowCredentials為true時,alloedOrigins不能包含特殊值“*”,因為該值不能在“Access-Control-Allow-Origin”響應頭部中設定。要允許憑據訪問一組來源,請顯式列出它們或考慮改用“AllowedOriginPatterns”。
解決:把 config.addAllowedOrigin("*"); 替換成 config.addAllowedOriginPattern("*");