Estou com este erro no angular 2
Failed to load http://localhost:8080/des-if-web/paisRecurso/buscar: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access. The response had HTTP status code 403.
Meu código java
@CrossOrigin(origins = "http://localhost:4200/", maxAge = 3600)
@RestController
public class PaisController
O pode estar que está barrando ?
Todas as vezes que eu usei esta anotação
@CrossOrigin
Eu a coloquei sobre os métodos.
Tirei da classe e coloquei no metodo
@CrossOrigin(origins = "http://localhost:4200/", maxAge = 3600)
@GetMapping(value = "/paisRecurso/buscar", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
public RetornoJackson buscarTodos() {
Mas não adiantou,
Acessando direto pelo browser funciona
http://localhost:8080/des-if-web/paisRecurso/buscar
Tenta dar uma olhada neste filtro
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
@Component
public class CrossOriginFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
final String origin = "http://localhost:4200";
response.addHeader("Access-Control-Allow-Origin", origin);
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, DELETE, OPTIONS");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers",
"Authorization, Origin, X-Requested-With, Content-Type, Accept," +
"x-gwt-module-base, x-gwt-permutation, clientid, longpush");
filterChain.doFilter(request, response);
}
}
Eu na tenho este componente.
Então devo criar ele é retirar da classe de rest ?
Inclui este componente, mesmo assim não funcionou.
Consegui da seguinte forma:
No SpringWebConfig, inclui
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedMethods("GET", "POST", "PUT",
"DELETE", "OPTIONS", "HEAD", "TRACE", "CONNECT");
}
Ai o angular faz requisições ao serviço do spring. Está correto ?
Quais parâmetros acrescentar para melhora a segurança ?
Não sei porque voltou dar este erro, ou então estava achando que tinha resolvido e não resolveu.
@darlan_machado criei esta classe e coloquei um breakpoint na linha final String origin = “http://localhost:4200”;. Mas nem quando inicia o servidor ou quando clico em um link que chama um controller não entra nesta classe.
Configurei na configuração do spring, assim:
@Bean
public FilterRegistrationBean corsFilterRegistration() {
FilterRegistrationBean registrationBean = new FilterRegistrationBean(
new CrossOriginFilter());
registrationBean.setName("CORS Filter");
registrationBean.addUrlPatterns("/*");
registrationBean.setOrder(1);
return registrationBean;
}
O que pode ser ?
O erro é este
Failed to load http://localhost:8080/des-if-web/admin/paisRecurso/pesquisar: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:4200’ is therefore not allowed access. The response had HTTP status code 401.
Acho que o problema está aqui:
String requestHeader = request.getHeader(“Authorization”);
Se preencho a variável requestHeader com um token válido, funciona.
Debugando
Navegador

Servidor
Pelo que entendi e pela imagem, para que o browser não está enviando o token.