什麼是跨域問題這裏我就不說了,直接說我使用addCorsMappings方法配置跨域時遇到的問題。具體代碼以下:java
public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") .allowCredentials(true) .allowedHeaders("*") .maxAge(3600); }
可是使用此方法配置以後再使用自定義攔截器時跨域相關配置就會失效。
緣由是請求通過的前後順序問題,當請求到來時會先進入攔截器中,而不是進入Mapping映射中,因此返回的頭信息中並無配置的跨域信息。瀏覽器就會報跨域異常。web
正確的解決跨域問題的方法時使用CorsFilter過濾器。代碼以下:spring
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); }
參考資料:segmentfault
一、【SpringMVC】與權限攔截器衝突致使的Cors跨域設置失效問題
二、springboot web跨域訪問問題解決--addCorsMappings和CorsFilter跨域