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
ehttps://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:
-
Usando o navegador:
- Abra o console (
F12
→Console
) 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.
- Abra o console (
-
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!
Por que configurar o CORS corretamente é essencial para APIs modernas?
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