No ‘Access-Control-Allow-Origin’ header is present on the requested resource

by Cinta Vidal Agullo / from beautifuldecay.com

Estava trabalhando em um projeto onde o web service em Jersey e a aplicação cliente em AngularJS estavam rodando no mesmo servidor Glassfish. Como esperado, quando a aplicação cliente consumisse o web service surgiria o erro “No ‘Access-Control-Allow-Origin’ header is present on the requested resource”.  Isso é uma questão relacionada ao CORS ou Cross-origin resource sharing. Uma aplicação web pode carregar livremente imagens, stylesheets, scripts, iframes, videos e plugins como o Adobe Flash de qualquer domínio. Porém, web fonts e requisições em AJAX são limitadas apenas para dentro do próprio domínio, e no meu caso, o web service está em um domínio (http://localhost:8080/meuwebservice/) diferente do domínio da aplicação  (http://localhost:8080/minhaaplicacao/), que possui o AngularJS fazendo requisições AJAX.

Para resolver tal situação, eu inseri o seguinte provider abaixo no meu web service. Lembrando que, para funcionar, os providers apenas devem estar na pasta que é lida pelo Jersey, ou pode ser entendida como a pasta onde estão os Resources, nenhuma outra configuração é necessária.

import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
@Provider
public class RestResponseFilter implements ContainerResponseFilter{
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException{
responseContext.getHeaders().putSingle("Access-Control-Allow-Origin", "*");
responseContext.getHeaders().putSingle("Access-Control-Allow-Credentials", "true");
responseContext.getHeaders().putSingle("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
responseContext.getHeaders().putSingle("Access-Control-Allow-Headers", "Content-Type, Accept");
}
}

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s