Spring Boot 教程:CORS 支持
【注】本文譯自: https://www.tutorialspoint.com/spring_boot/spring_boot_cors_support.htm

? ? 跨域資源共享 (CORS) 是一個安全概念,它允許在 web 瀏覽器中實現對資源訪問的限制。它可避免 JavaScript 代碼產生或消費別跨越不同域的請求。
? ?例如,你的運行在 8080 端口的?web 應用試圖使用?JavaScript 消費來自 9090 端口的 RESTful web 服務。在這樣的情形下,你將面對 web 瀏覽器上跨域資源共享的安全問題。
? ?這個問題有兩個需求要處理:
RESTful web 服務應當支持跨域資源共享。
RESTful web 服務應用應當允許來自 8080 端口訪問 API(s)。
? ?在本文中,我們將詳細學習如何讓一個?RESTful Web 服務應用能夠進行跨域請求。
在控制器方法中賦能 CORS
? ?我們需要在控制器方法上對一個?RESTful web 服務使用?@CrossOrigin?設置源。@CrossOrigin 注解支持指定 REST API,而不是對整個應用。
@RequestMapping(value?=?"/products")
@CrossOrigin(origins?=?"http://localhost:8080")
public?ResponseEntity<Object>?getProduct()?{
???return?null;
}
全局 CORS 配置
? ?要定義 @Bean 以對 Spring Boot 應用全局配置 CORS。
@Bean
public?WebMvcConfigurer?corsConfigurer()?{
???return?new?WebMvcConfigurerAdapter()?{
??????@Override
??????public?void?addCorsMappings(CorsRegistry?registry)?{
?????????registry.addMapping("/products").allowedOrigins("http://localhost:9000");
??????}????
???};
}
? ?在主?Spring Boot 應用中全局配置?CORS 的代碼如下:
package?com.tutorialspoint.demo;
import?org.springframework.boot.SpringApplication;
import?org.springframework.boot.autoconfigure.SpringBootApplication;
import?org.springframework.context.annotation.Bean;
import?org.springframework.web.servlet.config.annotation.CorsRegistry;
import?org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import?org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
@SpringBootApplication
public?class?DemoApplication?{
???public?static?void?main(String[]?args)?{
??????SpringApplication.run(DemoApplication.class,?args);
???}
???@Bean
???public?WebMvcConfigurer?corsConfigurer()?{
??????return?new?WebMvcConfigurerAdapter()?{
?????????@Override
?????????public?void?addCorsMappings(CorsRegistry?registry)?{
????????????registry.addMapping("/products").allowedOrigins("http://localhost:8080");
?????????}
??????};
???}
}
? ?現在,你創(chuàng)建了一個 Spring Boot web 應用,運行在 8080 端口上,RESTful web 服務應用運行在 9090 端口上。關于如何實現 RESTful Web 服務,你可以參考本系列教程的另外一部分:消費 RESTful Web 服務。