1. 程式人生 > 其它 >SpringBoot解決跨域

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("*");