Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 码头交叉源过滤器_Java_Ajax_Cross Domain_Jetty_Cors - Fatal编程技术网

Java 码头交叉源过滤器

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,*;

我已经配置了Jetty的跨原点过滤器,但仍然出现以下错误。有人知道什么地方出了问题以及如何解决吗?错误消息下面是我的覆盖描述符(即补充web.xml)

错误:

原点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 9
allowedHeaders
allowedMethods
中的:xmlns:xsi=”“xmlns=”“xsi:schemaLocation=”“version=“3.0”中,
*
将不起作用。