springboot配置CORS允許跨域訪問

Mars-xq發表於2018-12-21

參考:

CORS(跨域資源共享)

SpringBoot配置Cors解決跨域請求問題

配置CORS允許跨域訪問:


@Configuration
public class CORSConfig {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurerAdapter() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins(ALL)
                        .allowedMethods(ALL)
                        .allowedHeaders(ALL)
                        .allowCredentials(true);
            }
        };
    }

}

其他

WebMvcConfigurerAdapter 與 WebMvcConfigurer

在這裡插入圖片描述

CorsConfiguration類

public class CorsConfiguration {
	//Access-Control-Allow-Origin
	//該欄位必填。它的值要麼是請求時Origin欄位的具體值,要麼是一個*,表示接受任意域名的請求。
	private List<String> allowedOrigins;

	//Access-Control-Allow-Methods 
	//該欄位必填。它的值是逗號分隔的一個具體的字串或者*,表明伺服器支援的所有跨域請求的方法。
	//注意,返回的是所有支援的方法,而不單是瀏覽器請求的那個方法。這是為了避免多次"預檢"請求。
	private List<String> allowedMethods;

	private List<HttpMethod> resolvedMethods = DEFAULT_METHODS;

	//Access-Control-Allow-Headers
	private List<String> allowedHeaders;

	//Access-Control-Expose-Headers
	//該欄位可選。CORS請求時,XMLHttpRequest物件的getResponseHeader()方法只能拿到6個基本欄位:
	//Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。
	//如果想拿到其他欄位,就必須在Access-Control-Expose-Headers裡面指定。
	private List<String> exposedHeaders;

	//Access-Control-Allow-Credentials 
	//該欄位可選。它的值是一個布林值,表示是否允許傳送Cookie. 預設情況下,不傳送Cookie,即:false。 
	//對伺服器有特殊要求的請求,比如請求方法是PUT或DELETE,或者Content-Type欄位的型別是application/json,
	//這個值只能設為true。
	//如果伺服器不要瀏覽器傳送Cookie,刪除該欄位即可。
	private Boolean allowCredentials;

	//Access-Control-Max-Age
	//該欄位可選,用來指定本次預檢請求的有效期,單位為秒。在有效期間,不用發出另一條預檢請求。
	private Long maxAge;
	
	//.......
}

ajax請求示例

Access-Control-Allow-Origin: http://www.examples.com

//真實請求允許的方法
Access-Control-Allow-Methods: GET, POST, PUT, DELETE

//伺服器允許使用的欄位
Access-Control-Allow-Headers: X-Custom-Header

//是否允許使用者傳送、處理 cookie , 允許跨域帶上cookies
Access-Control-Allow-Credentials: true

//預檢請求的有效期,單位為秒。有效期內,不會重複傳送預檢請求
Access-Control-Max-Age: 1728000

相關文章