/ /

Como Configurar CORS no Spring Security: Guia Completo

Aprenda a configurar CORS no Spring Security de maneira segura e otimizada. Evite erros de requisição entre frontends e backends, protegendo sua aplicação de riscos comuns.

Ao integrar frontends modernos (como React ou Angular) com backends Spring Boot, frequentemente nos deparamos com erros de CORS (Cross-Origin Resource Sharing). Entender e configurar CORS corretamente no Spring Security é essencial para garantir segurança e fluidez na comunicação entre diferentes domínios.

Neste artigo, vamos explorar como dominar a configuração de CORS usando a classe CorsConfiguration do Spring, com práticas recomendadas para ambientes seguros.

O que é CORS e por que é importante?

CORS é um mecanismo de segurança implementado pelos navegadores para restringir requisições entre diferentes origens. Sem a configuração apropriada no servidor, o navegador bloqueia a interação entre o frontend e o backend, resultando em erros de requisição.

No Spring Security, conseguimos configurar regras específicas para permitir ou bloquear origens, métodos e cabeçalhos.

Configurações essenciais do CorsConfiguration

1. setAllowedOrigins(List<String> allowedOrigins)

Finalidade: Define quais domínios podem acessar seu backend.

Exemplo:

corsConfiguration.setAllowedOrigins(List.of("https://meu-frontend.com"));

Dica de SEO: Sempre restrinja a lista de origens para domínios específicos em produção.

2. setAllowedMethods(List<String> allowedMethods)

Finalidade: Especifica quais métodos HTTP são permitidos.

Exemplo:

corsConfiguration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE"));

3. setAllowedHeaders(List<String> allowedHeaders)

Finalidade: Controla quais cabeçalhos podem ser enviados pelo cliente.

Exemplo:

corsConfiguration.setAllowedHeaders(List.of("Authorization", "Content-Type"));

4. setExposedHeaders(List<String> exposedHeaders)

Finalidade: Define quais cabeçalhos o cliente poderá acessar na resposta.

Exemplo:

corsConfiguration.setExposedHeaders(List.of("Authorization"));

5. setAllowCredentials(boolean allowCredentials)

Finalidade: Permite ou bloqueia o envio de cookies e cabeçalhos de autenticação.

Exemplo:

corsConfiguration.setAllowCredentials(true);

Atenção: Se allowCredentials for true, você não pode usar "*" em allowedOrigins.

6. setMaxAge(Long maxAge)

Finalidade: Controla o tempo que o navegador pode armazenar a resposta de pré-vôo (OPTIONS).

Exemplo:

corsConfiguration.setMaxAge(3600L);

Integração do CORS no Spring Security

Para aplicar a configuração, use o CorsConfigurationSource combinado com a configuração do SecurityFilterChain:

@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http.cors().configurationSource(corsConfigurationSource())
        .and()
        .authorizeHttpRequests(auth -> auth.anyRequest().authenticated());
    return http.build();
}

@Bean
public CorsConfigurationSource corsConfigurationSource() {
    CorsConfiguration configuration = new CorsConfiguration();
    configuration.setAllowedOrigins(List.of("https://meu-frontend.com"));
    configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE"));
    configuration.setAllowedHeaders(List.of("Authorization", "Content-Type"));
    configuration.setExposedHeaders(List.of("Authorization"));
    configuration.setAllowCredentials(true);
    configuration.setMaxAge(3600L);

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", configuration);
    return source;
}

Boas práticas para configuração de CORS

  • Restrinja os domínios de produção.
  • Evite usar "*" em ambientes seguros.
  • Habilite credentials apenas quando necessário.
  • Audite métodos e cabeçalhos permitidos regularmente.

Conclusão

Uma configuração correta de CORS no Spring Security é fundamental para segurança e funcionamento de aplicações modernas. Seguindo essas práticas, você garante que sua API seja acessível apenas pelas origens certas, reduzindo riscos de segurança.

Avatar de Gabriel Rempel

Escrito por

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *