5
respostas

Bloqueio de CORS ao consumir a API Java Spring

Olá, estou desenvolvendo um front-end em Angular 14 para consumir uma API que fiz, mas estou com o erro "Access to XMLHttpRequest at 'localhost:8080/consulta-endereco' from origin 'http://localhost:4200' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: http, data, isolated-app, chrome-extension, chrome, https, chrome-untrusted."

Fiz a configuração pelo WebFluxConfigurer, usando o Spring Boot 2.7, conforme código a baixo, mas não funcionou:

@Configuration
@EnableWebFlux
public class WebConfig implements WebFluxConfigurer {
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("http://localhost:4200")
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "TRACE", "CONNECT");
    }
5 respostas

Giovanna, bom dia.

Tem uma solução porem não é a das melhores, mas tente colocar a anotação em cima do seu metodo GET para testar @CrossOrigin(origins = "http://localhost:4200")

ficaria por exemplo:

    @CrossOrigin(origins = "http://localhost:4200")
    @GetMapping("/example")
    public Example example(@RequestParam(required = false, defaultValue = "World") String name) {
    }

Coloquei a anotação, mas não funcionou. Estou usando um post mapping que retorna algumas informações da API.

Você colocou a anotação no PostMapping? Lembre-se que para retornar informações e sempre o Get.

Você poderia mandar o codigo de como está o seu Controller? Ou pelo menos o seu metodo.

Estou usando o post para enviar um cep pelo body e ter um retorno do endereço. Segue abaixo:

Código do controller

    @PostMapping
    public CepDTO buscaFrete(@RequestBody CepRequestDTO cep) throws Exception {
        CepDTO result = freteService.buscaEndereco(cep.getCep());
        return result;
    }

Código do service

@Service
public class FreteService {

    public CepDTO buscaEndereco(String cep) throws Exception {

        if (cep.equals("") || cep == null || cep.length() < 8 || cep.length() > 8) {
            throw new CepInvalidoException();

        } else {

            String url = "https://viacep.com.br/ws/" + cep + "/json/";
            RestTemplate restTemplate = new RestTemplate();
            CepDTO freteResult = restTemplate.getForEntity(url, CepDTO.class).getBody();
            }
            return freteResult

Oi!

Dá uma olhada aqui: https://cursos.alura.com.br/forum/topico-cors-113963

Nas últimas mensagens tem também a configuração no Spring Security