我發現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。 –