Access-Control-Allow-Origin multiple values usando Spring Boot and Vue.JS

Olá a todos.

Estou fazendo uma aplicação que usa Spring Boot (2.1.5.RELEASE) no back-end e Vue.JS no front.

Quando faço uma requisição GET, retorno para o front essa resposta:

[Date:“Wed, 10 Jul 2019 18:11:54 GMT”, Server:“Apache/2.4.18 (Ubuntu)”, Vary:“Authorization”, Cache-Control:“no-cache, private”, X-Robots-Tag:“noindex”, Access-Control-Allow-Origin:"*", Access-Control-Allow-Methods:“POST, GET, PUT, PATCH, DELETE, OPTIONS”, Access-Control-Allow-Headers:“Authorization, Content-Type, Accept”, Access-Control-Allow-Credentials:“true”, Keep-Alive:“timeout=5, max=100”, Connection:“Keep-Alive”, Transfer-Encoding:“chunked”, Content-Type:“application/json”]

Mas tenho esse problema com o CORS:

Access to XMLHttpRequest at ‘http://localhost:3000/api/v1/empresas’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: The ‘Access-Control-Allow-Origin’ header contains multiple values ‘*, *’, but only one is allowed.

Entendo que o problema é o valor multiplo do Access-Control-Allow-Origin, todavia, em momento nenhum eu estou declarando ele assim (vide resposta que retorno ao front)!

Alguém já passou por isso? Já vi inúmeros tópicos no SO, nenhum deles me ajudou. Entendi que o problema não está na request, e sim na response (mas ao mesmo tempo minha response está correta…)

Imagem da request no navegador:


Minha classe de configuração do CORS:

    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.CorsRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

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

 }
}

Meu controller:

@GetMapping(value = "empresas", produces = "application/json;charset=UTF-8")
public ResponseEntity listaEmpresa(@NotNull @RequestHeader String authorization) throws IOException {
    tokenValidatorService.validaToken(authorization);
    return companyModel.listaEmpresas(authorization);
}

Somente assim não vai não?

registry.addMapping("/**")

Por padrão, ele deve liberar para todas as origens.

Então, não vai. Descobri que o problema não estava na request do front para a API, e sim na resposta da API para o front. Por algum motivo, o Spring adiciona outro cabeçalho de ACAO. Resolvi ele por retornar uma new ResponseEntity.

[]'s

1 curtida