【发布时间】:2014-07-19 22:36:43
【问题描述】:
我有一个带有 servlet 的 Glassfish 4 网络服务器(在本地 atm 运行以进行测试),需要能够使用 Javascript 从不同域请求字符串。
在寻找解决方案时,人们建议通过创建过滤器类(实现 ContainerRequestFilter 和 ContainerResponseFilter)在我的 Web 服务器上启用 CORS。 我试过创建这样一个类,但客户端仍然得到同样的错误; “请求的资源上没有 'Access-Control-Allow-Origin' 标头”。
我做错了什么?
代码:
类:CrossDomainFilter.java
package server;
import java.io.IOException;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
@Provider
@CORSBinding
public class CrossDomainFilter implements ContainerRequestFilter, ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext request) throws IOException {
System.out.println("filter(request) called !!");
request.getHeaders().add("Access-Control-Allow-Origin", "*");
request.getHeaders().add("Access-Control-Allow-Headers",
"Authorization");
if (request.getMethod().equals("OPTIONS")) {
System.out.println("OPTIONS is requested!!!!!!!!!!!!!");
}
if (request.getMethod().equals("GET")) {
System.out.println("GET is requested!!!!!!!!!!!!!");
}
if (request.getMethod().equals("POST")) {
System.out.println("POST is requested!!!!!!!!!!!!!");
}
if (request.getMethod().equals("DELETE")) {
System.out.println("DELETE is requested!!!!!!!!!!!!!");
}
if (request.getMethod().equals("PUT")) {
System.out.println("PUT is requested!!!!!!!!!!!!!");
}
}
@Override
public void filter(ContainerRequestContext arg0,
ContainerResponseContext arg1) throws IOException {
System.out.println("filter(request, response) called !!");
}
}
发出请求的Javascript函数 函数 httpRequest(url) {
var request = new XMLHttpRequest();
request.open("GET", url, false);
request.setRequestHeader('Access-Control-Allow-Origin', '*');
request.send(null);
return (request.status == 404) ? url + " not found!" : request.responseText;
}
编辑: 最终使用了这个:https://bitbucket.org/thetransactioncompany/cors-filter 我现在可以跨域向我的服务器发出 javascript 请求。但我仍然想了解我之前的尝试有什么问题......
【问题讨论】:
标签: java javascript servlets glassfish cors