Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Erro CORS API Railway

Pessoal desenvolvi uma API simples em SpringBoot e publiquei ela no railway, estou utilizando o openaapi, e quando eu acesso o link do swagger ele abre normalmente, mas quando disparo uma requisição da erro de CORS. Vocês saberiam me orientar se preciso fazer alguma configuração a mais no meu projeto? Muito obrigado

3 respostas

Olá, Michael!

Pelo que você descreveu, parece que você está enfrentando um problema comum relacionado ao CORS (Cross-Origin Resource Sharing). Isso geralmente ocorre quando você tenta fazer uma requisição de um domínio (ou porta) para outro, o que é comum em aplicações web modernas.

No Spring Boot, você pode resolver esse problema adicionando uma configuração global de CORS. Aqui está um exemplo de como você pode fazer isso:

@Configuration
public class MyConfiguration {

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins("*")
                        .allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS")
                        .allowedHeaders("*")
                        .allowCredentials(true);
            }
        };
    }
}

Neste exemplo, estamos permitindo requisições CORS de qualquer origem (allowedOrigins("*")) para qualquer endpoint (addMapping("/**")) e qualquer tipo de requisição HTTP (allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD", "OPTIONS")). Além disso, estamos permitindo todos os headers (allowedHeaders("*")) e credenciais (allowCredentials(true)).

Por favor, substitua os valores de acordo com as necessidades da sua aplicação. Por exemplo, é uma boa prática restringir as origens permitidas para apenas as que realmente precisam acessar sua API.

Lembre-se de reiniciar sua aplicação depois de fazer essas alterações para que elas tenham efeito.

Espero ter ajudado e bons estudos!

Não deu certo Matheus :(

Pelo que andei percebendo acho que o erro se trata do http. Pois o link do dominio que fiz deploy é https mas o swagger-ui dispara a requisicação de um link http. Acredito que o erro seja esse pois quando eu disparo um GET diretamente no link do navegador funciona, mas esse mesmo GET pelo swagger não funciona.

OBS: No código que você mandou tive que trocar allowedOrigins("") por allowedOriginPatterns("") pois antes tinha dado esse erro: jakarta.servlet.ServletException: Request processing failed: java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a set of origins, list them explicitly or consider using "allowedOriginPatterns" instead.

solução!

Para fins de registro, consegui resolver o problema. Não necessariamente permitindo o CORS, mas conseguindo alterar o URL que o Swagger dispara a requisição, basta adicionar esse trecho de código.

@Configuration
public class OpenApiConfig {

    @Bean
    public OpenAPI customOpenAPI() {
        return new OpenAPI().addServersItem(new Server().url("Sua nova URL"))
                .addServersItem(new Server().url("http://localhost:8080"));
    }
}

Nesse caso adicionei 2 URL's, a do meu domínio publicado e o localhost para continuar testando localmente. Espero que seja útil