Angular e servidor

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

Authorization%3Dcliente

Servidor

Ninguém ?

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