Como configurar o CORS em uma API Java?

O CORS (Cross-Origin Resource Sharing) é uma política de segurança que controla quais domínios podem acessar recursos de uma API Java.

Como configurar o CORS em uma API Java?

O CORS (Cross-Origin Resource Sharing) é um mecanismo de segurança dos navegadores que impede que páginas web façam requisições a servidores diferentes do domínio de origem. Se sua API precisa permitir chamadas de outros domínios, você deve habilitar o CORS corretamente.

1. Configurando CORS Globalmente no Spring Boot

A maneira mais recomendada para configurar o CORS globalmente em um projeto Spring Boot é criando um filtro global:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

import java.util.List;

@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowedOrigins(List.of("http://localhost:3000", "https://meusite.com")); // Permitir origens específicas
        config.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS"));
        config.setAllowedHeaders(List.of("Authorization", "Content-Type"));

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);

        return new CorsFilter(source);
    }
}

Explicação:

  • Permite requisições de http://localhost:3000 e https://meusite.com.
  • Libera métodos HTTP comuns (GET, POST, etc.).
  • Permite os headers necessários (Authorization, Content-Type).
  • Aplica a configuração para toda a API (/**).

2. Configurando CORS em um Controller Específico

Se quiser permitir CORS apenas em alguns endpoints, adicione a anotação @CrossOrigin diretamente no Controller:

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "http://localhost:3000")
public class MeuController {

    @GetMapping("/mensagem")
    public String mensagem() {
        return "Requisição permitida pelo CORS!";
    }
}

Explicação:

  • A anotação @CrossOrigin(origins = "http://localhost:3000") permite requisições apenas desse domínio.
  • Pode ser usada em nível de classe (para todos os endpoints) ou em métodos individuais.

3. Configurando CORS no application.properties

Caso sua API precise permitir todas as origens, você pode configurar diretamente no application.properties:

spring.web.cors.allowed-origins=*
spring.web.cors.allowed-methods=GET,POST,PUT,DELETE,OPTIONS
spring.web.cors.allowed-headers=Authorization,Content-Type

Atenção: Usar * permite qualquer domínio acessar sua API, o que pode não ser seguro para produção.

4. Testando a Configuração do CORS

Após configurar o CORS, você pode testá-lo de duas formas:

  1. Usando o navegador:

    • Abra o console (F12Console) e tente fazer uma requisição AJAX para sua API de um domínio diferente.
    • Se o CORS não estiver configurado corretamente, o navegador bloqueará a requisição.
  2. Usando o Postman:

    • No Postman, faça uma requisição para sua API.
    • Se a resposta contiver os headers Access-Control-Allow-Origin, significa que o CORS está ativado corretamente.

Conclusão

O CORS é essencial para permitir que sua API seja consumida por clientes em domínios diferentes. No Spring Boot, você pode configurá-lo globalmente com um filtro, definir regras em Controllers específicos ou usar application.properties. Escolha a abordagem que melhor se adapta ao seu projeto!

Com a popularização das SPAs (Single Page Applications) e de aplicações frontend modernas, a necessidade de configurar corretamente o CORS aumentou. O CORS evita falhas de segurança permitindo que apenas domínios autorizados consumam os serviços de uma API. Muitas empresas enfrentam dificuldades ao lidar com bloqueios de CORS, e compreender sua configuração no Spring Boot é fundamental para garantir o funcionamento adequado das integrações entre sistemas.

Algumas aplicações:

  • Permitir que uma aplicação frontend (React, Angular, Vue) consuma APIs Java
  • Facilitar a comunicação entre microsserviços
  • Habilitar a integração de APIs públicas sem bloqueios do navegador
  • Evitar erros de CORS ao desenvolver aplicações web modernas

Dicas para quem está começando

  • Se estiver testando localmente, libere http://localhost:3000 para permitir chamadas do frontend
  • Evite usar * no CORS em produção, pois pode expor sua API a ataques
  • Use o Postman para verificar se os headers Access-Control-Allow-Origin estão sendo retornados corretamente
  • Se estiver usando um API Gateway, configure o CORS diretamente no gateway em vez da aplicação

Contribuições de Rodrigo Farias

Compartilhe este tutorial: Como configurar o CORS em uma API Java

Compartilhe este tutorial

Continue aprendendo:

Como fazer requisições HTTP em Java

Fazer requisições HTTP em Java é essencial para consumir APIs e se conectar a serviços web, utilizando bibliotecas como HttpClient e RestTemplate.

Tutorial anterior

Como autenticar usuários em uma aplicação Java web

Autenticar usuários em uma aplicação Java web pode ser feito com Spring Security, garantindo segurança e controle de acesso.

Próximo tutorial