Olá, pessoal! Nessa décima quinta aula do treinamento, iremos implementar a resolução para o problema de CORS.
O problema de CORS (Cross-Origin Resource Sharing) é um erro de segurança gerado pelos navegadores quando uma aplicação web tenta solicitar recursos de um domínio, porta ou protocolo diferente daquele de onde ela foi originada.
Por padrão, os navegadores bloqueiam essas requisições cruzadas para proteger os usuários contra ataques maliciosos, permitindo o acesso apenas se o servidor de destino enviar cabeçalhos HTTP específicos autorizando explicitamente aquela origem externa.
Para conseguir testar sua API e gerar o erro de CORS, crie um arquivo na extensão HTML em qualquer diretório e utilize o seguinte código:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Testar API</title>
<script>
// Requisição
fetch("http://localhost:8080/api/alunos/listar")
.then(retorno => retorno.json())
.then(lista => console.table(lista))
</script>
</head>
<body>
</body>
</html>
Ao abrir este arquivo em um navegador e selecionar a opção Inspecionar Elemento (F12), você irá se deprar com o erro de CORS.
Agora precisamos resolver o problema no back-end, atualize a estrutura do arquivo AlunoControle.java:
package br.com.ralflima.api.alunos.controle;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import br.com.ralflima.api.alunos.entidade.AlunoEntidade;
import br.com.ralflima.api.alunos.repositorio.AlunoRepositorio;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.PathVariable;
@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/api/alunos")
public class AlunoControle {
@Autowired
private AlunoRepositorio repositorio;
@GetMapping("/mensagem")
public String mensagem() {
return "Hello World!";
}
@PostMapping("/cadastrar")
public AlunoEntidade cadastrar(@RequestBody AlunoEntidade aluno) {
return repositorio.save(aluno);
}
@GetMapping("/listar")
public Iterable listar() {
return repositorio.findAll();
}
@PutMapping("/alterar/{codigo}")
public AlunoEntidade alterar(@PathVariable UUID codigo, @RequestBody AlunoEntidade aluno) {
aluno.setCodigo(codigo);
return repositorio.save(aluno);
}
@DeleteMapping("/remover/{codigo}")
public void remover(@PathVariable UUID codigo){
repositorio.deleteById(codigo);
}
}
Atualize o navegador e
Abaixo compartilho nossa aula no YouTube: