Spring Boot - Suporte CORS

Cross-Origin Resource Sharing (CORS) é um conceito de segurança que permite restringir os recursos implementados em navegadores web. Isso evita que o código JavaScript produza ou consuma as solicitações em origens diferentes.

Por exemplo, seu aplicativo da web está sendo executado na porta 8080 e, usando JavaScript, você está tentando consumir serviços da web RESTful da porta 9090. Em tais situações, você enfrentará o problema de segurança do Compartilhamento de recursos entre origens em seus navegadores da web.

Dois requisitos são necessários para lidar com este problema -

  • Os serviços da Web RESTful devem oferecer suporte ao compartilhamento de recursos entre origens.

  • O aplicativo de serviço da web RESTful deve permitir o acesso à (s) API (s) da porta 8080.

Neste capítulo, aprenderemos em detalhes sobre como habilitar solicitações de origem cruzada para um aplicativo de serviço da Web RESTful.

Habilitar CORS no método do controlador

Precisamos definir as origens do serviço da web RESTful usando @CrossOriginanotação para o método do controlador. Esta anotação @CrossOrigin suporta API REST específica, e não para todo o aplicativo.

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

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

Configuração CORS Global

Precisamos definir a configuração @Bean mostrada para definir o suporte de configuração CORS globalmente para seu aplicativo Spring Boot.

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

O código para definir a configuração CORS globalmente no aplicativo Spring Boot principal é fornecido abaixo.

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

Agora, você pode criar um aplicativo da web Spring Boot que execute na porta 8080 e seu aplicativo de serviço da web RESTful que pode ser executado na porta 9090. Para obter mais detalhes sobre a implementação do RESTful Web Service, você pode consultar o capítulo intituladoConsuming RESTful Web Services deste tutorial.