darlan_machado 21 de mar. de 2018
Todas as vezes que eu usei esta anotação
Eu a coloquei sobre os métodos.
guilhermebhte 21 de mar. de 2018
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
darlan_machado 21 de mar. de 2018
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 );
}
}
guilhermebhte 21 de mar. de 2018
Eu na tenho este componente.
Então devo criar ele é retirar da classe de rest ?
guilhermebhte 21 de mar. de 2018
Inclui este componente, mesmo assim não funcionou.
guilhermebhte 21 de mar. de 2018
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 ?
guilhermebhte 2 de abr. de 2018
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 ?
guilhermebhte 2 de abr. de 2018
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.
guilhermebhte 3 de abr. de 2018
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
guilhermebhte 3 de abr. de 2018
guilhermebhte 3 de abr. de 2018
Pelo que entendi e pela imagem, para que o browser não está enviando o token.