CORS não sendo aplicados - Spring Boot

Olá a todos (:


Tenho uma classe de configuração do Spring Boot para lidar com CORS. Essa classe, teoricamente, permite todas as origens, de todos os métodos e com todos os headers.

@Configuration
public class CorsConfiguration implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedMethods("*").allowedOrigins("*").allowedHeaders("*");
    }
}

Todavia, no front end, recebo:

Access to XMLHttpRequest at ‘http://172.17.178.81:3000/api/v1/token’ from origin ‘http://172.17.0.75:8002’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

Quando eu anoto meu endpoint com @CrossOrigin, funciona normalmente.

Gostaria de saber o que pode ser feito. Não acredito que anotar todo endpoint com @CrossOrigin seja o certo a ser feito.

Qualquer sugestão/ajuda é bem vinda.

[]'s

Cara, tenta especificar todos os métodos HTTP dessa forma:

.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "TRACE", "CONNECT");

Parece que tem algumas versões do spring que não adiciona o OPTIONS por padrão quando usa o *. E tem situações que uma requisição OPTIONS é feita antes da requisição original.

Nesse caso é o que acontece, mesmo. Tentei especificar, até mesmo as URLs na mão, mas mesmo assim não foi.

Valeu pela sugestão!

Anotei com:

@Configuration (já estava)
@EnableWebMvc
@ComponentScan

E aparentemente funcionou. Todavia, é certo?

Pra mim, ok. Agora:

Pra mim estranho, pois o application deveria escanear esse configuration.

Mas, se deu certo assim, tah bom d+.

Caro Lucas,

Removi o @ComponentScan, já que o Application escaneava. Deu certo apenas com o @EnableWebMvc.

Não sabia da necessidade dessa anotação, mas fica o aprendizado para casos futuros.

1 curtida

A gente acha que resolveu um problema, mas…

Segundo esse guia, na parte 6.2, se a anotação @EnableWebMvc estiver presente na aplicação, o SpringFox (parte da documentação do projeto) não consegue gerar o UI do Swagger. Sem a anotação, tenho documentação mas meu CORS não funciona. Com a anotação, o CORS funciona mas a documentação não.

Qualquer luz, continua sendo bem-vinda…

Aparentemente, não se pode ter duas classes que extendem (ou implementam) classes que configurem o webmvc. Colocando tudo numa unica classe resolveu.

[]'s