1. 程式人生 > 實用技巧 >Spring Boot 教程:CORS 支援

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,而不是對整個應用。
1 @RequestMapping(value = "/products")
2 @CrossOrigin(origins = "http://localhost:8080")
3  
4 public ResponseEntity<Object> getProduct() {
5    return
null; 6 }

全域性 CORS 配置

要定義 @Bean 以對 Spring Boot 應用全域性配置 CORS。
1 @Bean
2 public WebMvcConfigurer corsConfigurer() {
3    return new WebMvcConfigurerAdapter() {
4       @Override
5       public void addCorsMappings(CorsRegistry registry) {
6          registry.addMapping("/products").allowedOrigins("http://localhost:9000");
7 } 8 }; 9 }
在主Spring Boot 應用中全域性配置CORS 的程式碼如下:
 1 package com.tutorialspoint.demo;
 2  
 3 import org.springframework.boot.SpringApplication;
 4 import org.springframework.boot.autoconfigure.SpringBootApplication;
 5 import org.springframework.context.annotation.Bean;
 6 import org.springframework.web.servlet.config.annotation.CorsRegistry;
 7 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 8 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 9  
10 @SpringBootApplication
11 public class DemoApplication {
12    public static void main(String[] args) {
13       SpringApplication.run(DemoApplication.class, args);
14    }
15    @Bean
16    public WebMvcConfigurer corsConfigurer() {
17       return new WebMvcConfigurerAdapter() {
18          @Override
19          public void addCorsMappings(CorsRegistry registry) {
20             registry.addMapping("/products").allowedOrigins("http://localhost:8080");
21          }
22       };
23    }
24 }
現在,你建立了一個 Spring Boot web 應用,執行在 8080 埠上,RESTful web 服務應用執行在 9090 埠上。關於如何實現 RESTful Web 服務,你可以參考本系列教程的另外一部分:消費 RESTful Web 服務