Olá a todos! Na empresa onde trabalho estamos desenvolvendo um portal e uma API para expor os dados para a sociedade, a ideia é que tornemos públicos os dados que na verdade já eram pra ser realmente públicos, mas que qualquer pessoa utilizando qualquer linguagem ou ferramenta envie uma requisição get para uma URL e obtenha um json como retorno.
Como qualquer domínio poderá fazer uma requisição para a minha API, eu implementei um filtro para solucionar o problema do CORS como indicado aqui: https://pedrohosilva.wordpress.com/2015/04/28/aplicacao-web-com-vraptor-4-pt9/
Mas ao tentar fazer um cliente javascript para a minha API, ainda está apresentando erro de CORS:
jquery2.1.4.min.js:4 GET http://www4.tce.ma.gov.br/tce_api/licitacoes&enteId=1 send @ jquery2.1.4.min.js:4ajax @ jquery2.1.4.min.js:4(anonymous function) @ licitacoes:17
licitacoes:1 XMLHttpRequest cannot load http://www4.tce.ma.gov.br/tce_api/licitacoes&enteId=1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access. The response had HTTP status code 405.
O código está dessa forma:
@Controller
public class CORSController {
private Result result;
private Router router;
public CORSController() { }
@Inject
public CORSController(Result result, Router router) {
this.result = result;
this.router = router;
}
@Options
@Path(value = "/*")
public void options(@Observes VRaptorRequestStarted requestInfo) {
Set<HttpMethod> allowed = router.allowedMethodsFor(requestInfo.getRequest().getRequestedUri());
String allowMethods = allowed.toString().replaceAll("\\[|\\]", "");
result.use(Results.status()).header("Allow", allowMethods);
result.use(Results.status()).header("Access-Control-Allow-Methods", allowMethods);
result.use(Results.status()).header("Access-Control-Allow-Headers", "Content-Type, X-Requested-With, accept, Authorization, origin");
}
}
@Intercepts
public class CORSInterceptor {
private HttpServletRequest request;
private HttpServletResponse response;
public CORSInterceptor() {}
@Inject
public CORSInterceptor( HttpServletRequest request,
HttpServletResponse response ) {
this.request = request;
this.response = response;
}
@BeforeCall
public void intercept() throws InterceptionException {
String origin = request.getHeader("origin") != null ? request.getHeader("origin") : "*";
response.addHeader("Access-Control-Allow-Origin", origin);
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Expose-Headers", "Content-Type, Location");
}
}
Mas não tá rolando não, alguém pode me dar uma força?