SpringBoot - 使用 addCorsMappings 配置跨域的坑

什麼是跨域問題這裏我就不說了,直接說我使用addCorsMappings方法配置跨域時遇到的問題。具體代碼如下:

public void addCorsMappings(CorsRegistry registry) {
   
    registry.addMapping("/**")
            .allowedOrigins("*")
            .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
            .allowCredentials(true)
            .allowedHeaders("*")
            .maxAge(3600);
}

但是使用此方法配置之後再使用自定義攔截器時跨域相關配置就會失效。

原因是請求經過的先後順序問題,當請求到來時會先進入攔截器中,而不是進入Mapping映射中,所以返回的頭信息中並沒有配置的跨域信息。瀏覽器就會報跨域異常。

正確的解決跨域問題的方法時使用CorsFilter過濾器。代碼如下:

private CorsConfiguration corsConfig() {
    CorsConfiguration corsConfiguration = new CorsConfiguration();
    // 請求常用的三種配置,*代表允許所有,當時你也可以自定義屬性(比如header只能帶什麼,只能是post方式等等)
    corsConfiguration.addAllowedOrigin("*");
    corsConfiguration.addAllowedHeader("*");
    corsConfiguration.addAllowedMethod("*");
    corsConfiguration.setAllowCredentials(true);
    corsConfiguration.setMaxAge(3600L);
    return corsConfiguration;
}

@Bean
public CorsFilter corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", corsConfig());
    return new CorsFilter(source);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章