出於安全原因,瀏覽器禁止AJAX調用當前域之外的域的資源。跨源資源共享(CORS)是由大多數瀏覽器實現的W3C規范,允許您指定哪些類型的跨域請求是被授權的,而不是基於IFRAME或JSONP的不安全且功能較差的工作區。
Spring MVC HandlerMapping提供了對CORS的內置支持。在成功地將請求映射到處理程序之后,HandlerMapping將檢查給定請求和處理程序的CORS配置,並采取進一步的操作。
為了啟用跨源請求(例如,源頭是存在的,並且與請求的主機不同),您需要有一些顯式聲明的CORS配置。如果沒有找到匹配的CORS配置,則拒絕請求前請求。在簡單和實際的CORS請求的響應中沒有添加CORS頭,因此瀏覽器拒絕它們。
每個HandlerMapping都可以通過基於URL模式的Cors映射單獨配置。在大多數情況下,應用程序將使用MVC Java config或XML名稱空間來聲明這樣的映射。
在HandlerMapping級別上的全局CORS配置可以與更細粒度的、handler級別的CORS配置相結合。例如,帶注解的控制器可以使用類或方法級的@CrossOrigin注解。
@CrossOrigin注解的使用
默認情況下@CrossOrigin允許:
- 所有的域。
- 所有的headers
- 將控制器方法映射到的所有HTTP方法。
- maxAge設置為30分鍾。
類級別支持某一特定的域
類和方法上都使用
Spring JAVA Configuration中 全局配置
在SpringBoot中的應用
在SpringSecurity中的應用
@EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http // by default uses a Bean by the name of corsConfigurationSource //默認配置一個Bean Name為corsConfigurationSource .cors().and() ... } //配置那些域可以訪問的我的資源 @Bean CorsConfigurationSource corsConfigurationSource() { CorsConfiguration configuration = new CorsConfiguration(); configuration.setAllowedOrigins(Arrays.asList("https://example.com")); configuration.setAllowedMethods(Arrays.asList("GET","POST")); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", configuration); return source; } }
配置跨域 代碼和上面一樣SpringBoot和Spring Security整合應用
- 配置Spring Security
微信公眾號


