Java 码头交叉源过滤器
我已经配置了Jetty的跨原点过滤器,但仍然出现以下错误。有人知道什么地方出了问题以及如何解决吗?错误消息下面是我的覆盖描述符(即补充web.xml) 错误:Java 码头交叉源过滤器,java,ajax,cross-domain,jetty,cors,Java,Ajax,Cross Domain,Jetty,Cors,我已经配置了Jetty的跨原点过滤器,但仍然出现以下错误。有人知道什么地方出了问题以及如何解决吗?错误消息下面是我的覆盖描述符(即补充web.xml) 错误: 原点http://localhost:8090 访问控制允许原点不允许。 覆盖描述符: 交叉起源 org.eclipse.jetty.servlets.CrossOriginFilter 允许起源 * 允许的方法 * 允许的标题 * 交叉起源 /* 请求头 接受:*/* 接受字符集:ISO-8859-1,utf-8;q=0.7,*;
原点http://localhost:8090 访问控制允许原点不允许。
覆盖描述符:
交叉起源
org.eclipse.jetty.servlets.CrossOriginFilter
允许起源
*
允许的方法
*
允许的标题
*
交叉起源
/*
请求头
接受:*/*
接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3
接受编码:gzip、deflate、sdch
接受语言:en-US,en;q=0.8
访问控制请求标题:来源、内容类型、接受
访问控制请求方法:POST
连接:保持活力
主机:本地主机:8080
来源:http://localhost:8090
推荐人:http://localhost:8090/home
用户代理:Mozilla/5.0(X11;Linux i686)AppleWebKit/535.8(KHTML,比如Gecko)Chrome/17.0.942.0
响应标题
Allow:POST、GET、OPTIONS、HEAD
内容长度:0
日期:2011年11月30日星期三02:13:21 GMT
服务器:Jetty(7.5.4.v20111024)
Aloha
我也为此奋斗了一段时间,发现最后一个节点需要:
交叉起源
/*
不是
交叉起源
/*
以下是我找到的帮助我的链接:
更新web.xml文件并重新启动jetty服务器后,我能够使用jQuery ajax调用发出跨域请求
Rob我在跨域调用部署到GAE的web应用程序时遇到了这个问题。您可以向Servlet响应添加显式头,如:
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException
{
res.addHeader("Access-Control-Allow-Origin", "*");
...
}
还要确保WAR的根目录中有一个crossdomain.xml策略文件,如:
<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
<allow-access-from domain="*"/>
</cross-domain-policy>
HTH.在浪费了我很多时间之后,我刚刚打开了一个bug报告: 还要注意的是,参数值中的通配符大多不受支持。(即允许的标题)对于我(jetty版本8.1.5.v20120716),只有“web.xml”中的这些行有帮助:
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>GET,POST,DELETE,PUT,HEAD</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>origin, content-type, accept</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
交叉起源
org.eclipse.jetty.servlets.CrossOriginFilter
允许起源
*
允许的方法
获取、发布、删除、放置、头
允许的标题
来源、内容类型、接受
交叉起源
/*
我已经将日志级别更改为调试并从jetty控制台日志中获取信息(如“get、POST、DELETE、PUT、HEAD”和“origin、content-type、accept”)。例如:
DEBUG CrossOriginFilter:359-方法DELETE在允许的方法中[GET、POST、DELETE、PUT、HEAD]
19:14:28413
调试CrossOriginFilter:389-头[origin,content-type,accept]不在允许的头[*]
然后我用$.ajax({url:'anotherHost',type:'DELETE',…})检查了结果。我在Jetty Web服务器中使用ActiveMQ ajax时遇到了同样的问题。我的问题是,allowed headers字段不接受“*”形式的通配符 为了让ActiveMQAjax正常工作,我还必须将“Options”方法添加到allowedMethods中 web.xml中的跨源筛选器:
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
<init-param>
<param-name>allowedOrigins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>allowedMethods</param-name>
<param-value>GET,POST,OPTIONS,DELETE,PUT,HEAD</param-value>
</init-param>
<init-param>
<param-name>allowedHeaders</param-name>
<param-value>origin, content-type, accept, authorization</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
交叉起源
org.eclipse.jetty.servlets.CrossOriginFilter
允许起源
*
允许的方法
获取、发布、选项、删除、放置、标题
允许的标题
来源、内容类型、接受、授权
交叉起源
*
您能否使用Wireshark之类的工具来显示正在交换的实际请求/响应头?这将有助于验证是否发送了正确的CORS标头。@先生:我已经添加了请求/响应标头的详细信息。响应头不包括访问控制允许来源:
Hmm,不确定。您可以检查日志以查看筛选器是否记录了任何内容吗?过滤器设置了记录器:@monsur:过滤器似乎没有记录任何内容。使用以下命令:mvnjetty:run&>~/mvnjetty.log
,我将stdout&stderr重定向到一个日志文件。我已经搜索了日志文件,但没有提到跨源过滤器。我的方案无法识别“过滤器模式”,知道这是在哪里定义的吗?它不在Jetty 9allowedHeaders
和allowedMethods
中的:xmlns:xsi=”“xmlns=”“xsi:schemaLocation=”“version=“3.0”中,*
将不起作用。