Apache Solr: установка заголовков HTTP-ответов из solrconfig.xml для CORS

можно ли настроить отправку пользовательского заголовка ответа HTTP из ? Я думаю, что можно было бы добавить некоторую конфигурацию в <requestDispatcher> раздел, так как он управляет заголовками кэширования.

Я уверен, что это возможно в конфигурации контейнера сервлетов (Jetty, Tomcat и т. д.), но я хотел бы сделать это из конфигурационных файлов Solr, если это вообще возможно.

Если это имеет значение, я пытаюсь установите Access-Control-Allow-Origin заголовок для запросов CORS AJAX от другого хоста.

4 ответов


вместо этого вы можете использовать JSONP. См. эту ссылку для примера


самый простой способ будет написать custom javax.servlet.Filter и добавить


front solr с apache и conf apache для отправки заголовка. Например,

Header set X-Server-Name "abc0.com"

нашел этой полезная. Вам нужно будет добавить пару jetty jars и webdefault.изменение xml для включения CORS.

Я воспроизводить здесь текст:


в примере проекта solr при его запуске вызывается следующая строка:

java-jar start

вы запускаете сервер причала на локальном компьютере, который будет обслуживать результаты solr. Этот сервер не может делать CORS (Cross Origin Совместное Использование Ресурсов). Это означает, что если вы попытаетесь выполнить вызов AJAX с веб-страницы другого происхождения, чем сам сервер, вам будет отказано в ответе.

чтобы исправить это, вам сначала нужно получить apropriate jars, чтобы разрешить совместное использование ресурсов между доменами.

я использовал следующую банку: 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, перейдя: Ява -фляга пуск-версия

и вы увидите дамп следующим образом: C:\Users\username\Desktop\solr-4.8.0\example>запуск java-jar.банку --версия Активные параметры: [по умолчанию, *] Информация о версии 18 записей в пути к классам. Примечание: порядок, представленный здесь, - это то, как они будут отображаться на пути к классам. изменения параметров=[option, option,...] опция командной строки будет отражена он ре.

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

ищем строку ${пристани.home}\lib\jetty-server (в дампе над строкой 5), и вы должны иметь возможность видеть свою версию.

вы также захотите получить "jetty-util" для своей версии jetty: http://mvnrepository.com/artifact/org.mortbay.jetty/jetty-util

вы должны быть в состоянии найти там версию. Я jetty-util-8.1.10.v20130312.банку для меня.

Теперь возьмите оба сервлета.Джар и утиль.файлы jar, которые вы загрузили, и поместите их в следующую папку: solr-4.8.0\example\lib

для вашей версии это может быть по-другому, но вы хотите его в папке lib в каталоге примера.

наконец, чтобы эти изменения вступили в силу, вы хотите открыть solr-4.8.0\example\etc\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.

заметки: Если вы начинаете фантазировать и имеете несколько webapps, работающих на сервере причала примера solr, это повлияет на все эти веб-приложения. Имейте в виду, что вы установили шаблон url для распознавания любого домена, который опасен для производственной настройки. Это только для локального тестирования.

также я попытался изменить сеть.xml-файл в папке webapps, чтобы эти изменения оставался бы локальным, но после нескольких часов попыток заставить его идти, я сдался и обнаружил, что включение его в глобальный webdefault сработало.