2012-06-08 15 views
6

È possibile impostare l'invio di un'intestazione di risposta HTTP personalizzata all'interno del file solrconfig.xml? Sto pensando che potrebbe essere possibile aggiungere qualche configurazione alla sezione <requestDispatcher> poiché controlla le intestazioni di cache.Apache Solr: impostazione delle intestazioni di risposta HTTP da solrconfig.xml per CORS

Sono sicuro che ciò è possibile nella configurazione del contenitore servlet (Jetty, Tomcat, ecc.), Ma mi piacerebbe farlo dai file di configurazione di Solr se possibile.

Se questo fa alcuna differenza, sto tentando di impostare un'intestazione Access-Control-Allow-Origin per richieste CORS AJAX da un host diverso.

risposta

7

È possibile utilizzare invece JSONP. Vedere questo link per un esempio

+0

Grazie per il collegamento. Lo considererò sicuramente per la mia riserva, ma mi piacerebbe che il CORS funzionasse, se possibile. –

+0

Mi dispiace che ci sia voluto così tanto tempo per darti credito. Alla fine ho implementato la soluzione e ho finito con JSONP perché il supporto per esso è incorporato in Solr. –

1

Il modo più semplice sarà di scrivere personalizzato javax.servlet.Filter e aggiungere l'intestazione Access-Control-Allow-Origin lì. Per il codice che gestisce l'elaborazione HTTP vedi classe org.apache.solr.servlet.SolrDispatchFilter.

È il modo più semplice per procedere. Se guardi il doFilter in SolrDispatchFilter - l'unica manipolazione con le intestazioni HTTP è di metterli nella cache e non c'è posto che li tocchi in qualche modo.

0

front sol con apache e conf apache per inviare indietro l'intestazione. Ad esempio,

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

Ho trovato utile this. Dovresti aggiungere un paio di jetty jars e di webdefault.xml per abilitare CORS.

sto che riproduce il testo qui:


Nel progetto di esempio solr quando si esegue il programma chiamando la seguente riga:

java-jar Iniziamo

si avvia un Server Jetty sul tuo computer locale che servirà i risultati del solr. Questo server non è in grado di eseguire CORS (Cross Origin Resource Sharing). Il che significa che se provassi a fare una chiamata AJAX da una pagina web di origine diversa da quella del server stesso, ti verrebbe negata una risposta.

Per risolvere questo problema è necessario prima ottenere i vasi appropriati per consentire la condivisione delle risorse tra domini.

ho usato il seguente vaso: http://repo1.maven.org/maven2/org/eclipse/jetty/jetty-servlets/8.1.10.v20130312/

ma potrebbe essere necessario per ottenere la versione più adatta per la versione di pontile: http://repo1.maven.org/maven2/org/eclipse/jetty/jetty-servlets/

Si può scoprire quale versione di Jetty si sta eseguendo con il tuo esempio solr andando: java-jar iniziare --version

e vedrete una discarica come segue: C: \ utenti \ nomeutente \ Desktop \ solr-4.8.0 \ esempio> java -jar start.jar --version Opzioni attive: [default, *] Versione Informazioni su 18 voci nel classpath. Nota: l'ordine presentato qui è come appariranno sul classpath. modifiche alle OPZIONI = [opzione, opzione, ...] l'opzione della riga di comando sarà riflessa su 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 

Cercare la riga che dice $ {} jetty.home \ lib \ molo-server (in discarica di cui sopra è la linea 5) e si dovrebbe essere in grado di vedere la vostra versione.

Si potrà anche ottenere il "pontile-util" per la versione molo troppo: http://mvnrepository.com/artifact/org.mortbay.jetty/jetty-util

si dovrebbe essere in grado di trovare la versione lì. Ho usato jetty-util-8.1.10.v20130312.jar per il mio.

Ora prendete sia i file servlet.jar e util.jar scaricati e posizionarlo nella cartella seguente: solr-4.8.0 \ esempio \ lib

per la versione potrebbe essere diverso, ma si lo voglio nella cartella lib sotto la directory di esempio.

Infine, per permettere a queste modifiche abbiano effetto, si vuole aprire solr-4.8.0 \ esempio \ etc \ webdefault.xml

e aggiungere le seguenti righe prima </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> 

Ora riavvia il tuo server e dovresti avere CORS abilitato.

Note: Se si inizia a ottenere l'immaginazione e hanno molteplici applicazioni web in esecuzione sul server pontile esempio solr allora questo influenzerà tutte quelle applicazioni web. Tieni presente che hai impostato l'url patter per riconoscere qualsiasi dominio che sia pericoloso per una configurazione di produzione. Questo è solo per test locali.

Inoltre ho provato a cambiare il file web.xml nella cartella webapps in modo che questi cambiamenti sarebbero rimaste locale, ma dopo ore di cercare di farlo andare, ho rinunciato e ha scoperto che metterlo nel webdefault globale ha funzionato .

Problemi correlati