Spring Boot - Soporte CORS

Cross-Origin Resource Sharing (CORS) es un concepto de seguridad que permite restringir los recursos implementados en los navegadores web. Evita que el código JavaScript produzca o consuma las solicitudes contra un origen diferente.

Por ejemplo, su aplicación web se ejecuta en el puerto 8080 y, al usar JavaScript, está tratando de consumir servicios web RESTful desde el puerto 9090. En tales situaciones, enfrentará el problema de seguridad de Intercambio de recursos entre orígenes en sus navegadores web.

Se necesitan dos requisitos para manejar este problema:

  • Los servicios web RESTful deben admitir el uso compartido de recursos entre orígenes.

  • La aplicación de servicio web RESTful debe permitir el acceso a las API desde el puerto 8080.

En este capítulo, aprenderemos en detalle sobre cómo habilitar solicitudes de origen cruzado para una aplicación de servicio web RESTful.

Habilitar CORS en el método del controlador

Necesitamos establecer los orígenes del servicio web RESTful usando @CrossOriginanotación para el método del controlador. Esta anotación @CrossOrigin admite una API REST específica, y no para toda la aplicación.

@RequestMapping(value = "/products")
@CrossOrigin(origins = "http://localhost:8080")

public ResponseEntity<Object> getProduct() {
   return null;
}

Configuración CORS global

Necesitamos definir la configuración de @Bean mostrada para establecer el soporte de configuración CORS globalmente para su aplicación Spring Boot.

@Bean
public WebMvcConfigurer corsConfigurer() {
   return new WebMvcConfigurerAdapter() {
      @Override
      public void addCorsMappings(CorsRegistry registry) {
         registry.addMapping("/products").allowedOrigins("http://localhost:9000");
      }    
   };
}

A continuación se muestra el código para establecer la configuración CORS globalmente en la aplicación principal Spring Boot.

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");
         }
      };
   }
}

Ahora, puede crear una aplicación web Spring Boot que se ejecute en el puerto 8080 y su aplicación de servicio web RESTful que se pueda ejecutar en el puerto 9090. Para obtener más detalles sobre la implementación del servicio web RESTful, puede consultar el capítulo tituladoConsuming RESTful Web Services de este tutorial.