我发现this有帮助。您需要添加几个jetty jar和webdefault.xml更改以启用CORS。
我在这里再现文本:
在这个例子中Solr的项目,当您启动它通过调用下面一行:
Java的罐子开始
您正在启动本地计算机上的Jetty服务器将用于Solr结果。此服务器无法执行CORS(跨源资源共享)。这意味着如果您尝试从不同于源服务器的网页进行AJAX调用,您将被拒绝回应。
要解决此问题,您首先需要获取适当的罐子以允许跨域资源共享。
我用下面的jar: http://repo1.maven.org/maven2/org/eclipse/jetty/jetty-servlets/8.1.10.v20130312/
但是你可能需要得到最适合您的码头的版本的版本: http://repo1.maven.org/maven2/org/eclipse/jetty/jetty-servlets/
你可以找到你正在运行的是什么版本的Jetty以你的solr为例: java -jar start --version
你会看到一个转储如下: C:\ Users \ username \ Desktop \ solr-4.8.0 \ example> java -jar start.jar --version 活动选项:[默认,*] 版本关于类路径中18个条目的信息。 注意:此处显示的顺序是它们在类路径中的显示方式。 对OPTIONS = [option,option,...]命令行选项的更改将反映他 re。
0: (dir) | ${jetty.home}\resources
1: 8.1.10.v20130312 | ${jetty.home}\lib\jetty-xml-8.1.10.v20130312.jar
2: 3.0.0.v201112011016 | ${jetty.home}\lib\servlet-api-3.0.jar
3: 8.1.10.v20130312 | ${jetty.home}\lib\jetty-http-8.1.10.v20130312.jar
4: 8.1.10.v20130312 | ${jetty.home}\lib\jetty-continuation-8.1.10.v20130312.jar
5: 8.1.10.v20130312 | ${jetty.home}\lib\jetty-server-8.1.10.v20130312.jar
6: 8.1.10.v20130312 | ${jetty.home}\lib\jetty-security-8.1.10.v20130312.jar
7: 8.1.10.v20130312 | ${jetty.home}\lib\jetty-servlet-8.1.10.v20130312.jar
8: 8.1.10.v20130312 | ${jetty.home}\lib\jetty-webapp-8.1.10.v20130312.jar
9: 8.1.10.v20130312 | ${jetty.home}\lib\jetty-deploy-8.1.10.v20130312.jar
10: 8.1.10.v20130312 | ${jetty.home}\lib\jetty-servlets-8.1.10.v20130312.jar
11: 1.7.6 | ${jetty.home}\lib\ext\jcl-over-slf4j-1.7.6.jar
12: 1.7.6 | ${jetty.home}\lib\ext\jul-to-slf4j-1.7.6.jar
13: 1.2.16 | ${jetty.home}\lib\ext\log4j-1.2.16.jar
14: 1.7.6 | ${jetty.home}\lib\ext\slf4j-api-1.7.6.jar
15: 1.7.6 | ${jetty.home}\lib\ext\slf4j-log4j12-1.7.6.jar
16: 8.1.10.v20130312 | ${jetty.home}\lib\jetty-util-8.1.10.v20130312.jar
17: 8.1.10.v20130312 | ${jetty.home}\lib\jetty-io-8.1.10.v20130312.jar
寻找这样$ {} jetty.home \ LIB \码头服务器(在转储上述这是第5行),你应该能够看到你的版本就行了。
您也想获得“码头-UTIL”为您码头版本太多: http://mvnrepository.com/artifact/org.mortbay.jetty/jetty-util
你应该能够在那里找到你的版本。我使用了jetty-util-8.1.10.v20130312.jar。
现在采取两个,你下载并把它放入以下文件夹中的servlet.jar和util.jar文件: Solr的-4.8.0 \例子\ lib中
对于您的版本可能不同,但你希望它在示例目录下的lib文件夹中。
最后,让这些更改生效,要开辟Solr的-4.8.0 \例子\等\ webdefault.xml
,并添加以下行之前</web-app>
:
<filter>
<filter-name>cross-origin</filter-name>
<filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cross-origin</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
现在重新启动你的服务器,你应该启用CORS。
备注: 如果您开始喜欢并且在solr示例jetty服务器上运行多个webapps,则会影响所有这些Web应用程序。请注意,您已将url patter设置为识别对于生产设置有危险的任何域。这仅用于本地测试。
此外,我也尝试更改webapps文件夹中的web.xml文件,以便这些更改将保持本地化,但经过几小时试图让它去,我放弃了,发现它在全球webdefault工作。
感谢您的链接。我一定会认为这是我的后备,但如果可能的话,我希望得到真正的CORS工作。 –
对不起,花了这么长时间才能给你信用。我终于实现了该解决方案,并最终使用JSONP,因为它支持Solr。 –