Spring Boot CORS(跨域)支持

  • CORS(跨域)支持

    跨域资源共享(CORS)是一种安全概念,它可以限制在Web浏览器中实现的资源。它可以防止JavaScript代码针对不同来源生成或使用请求。例如,您的Web应用程序在8080端口上运行,并且您通过使用JavaScript尝试从9090端口使用RESTful Web服务。在这种情况下,您将在Web浏览器上遇到跨域资源共享安全问题。处理此问题需要两个要求-
    • RESTful Web服务应支持跨域资源共享。
    • RESTful Web服务应用程序应允许从8080端口访问API。
    在本章中,我们将详细学习如何为RESTful Web Service应用程序启用跨域请求。
  • 在控制器方法中启用CORS

    我们需要通过对控制器方法使用@CrossOrigin注解来设置RESTful Web服务的来源。@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.jc2182.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");
             }
          };
       }
    }
    
    现在,您可以创建一个在8080端口上运行的Spring Boot Web应用程序,以及一个可以在8080端口上跨域请求9090端口上的/products - RESTful Web服务应用程序。有关实现RESTful Web服务的更多详细信息,可以参考本教程标题为“消费RESTful Web服务”的章节和“构建RESTful Web服务”。