2016-03-22 10 views
0

Ich verwende Solr 4.3 auf Apache Tomcat 9. Es wird als Webanwendung bereitgestellt und wird von einem CRM-Produkt verwendet, um Indizes bereitzustellen.Solr, Tomcat und CORS

Wir brauchen eine Suche der Indizes durchzuführen und so so die folgende Abfrage Ich versuche solr zu hinterfragen und mache mit:

http://localhost:8888/solr-intranet-int/intranet_users/suggest?q=(surname_t:*on*) 

funktioniert gut in meinem Postbote Client so auf eine schnelle Testseite Bau vor der Integration. Die Testseite ist reines HTML, gehostet auf einer eigenen IIS-Website, also auf einer anderen Domain als die solr-Instanz.

Die jquery in der Testseite sehen wie folgt aus:

$("#bob").autocomplete({ 
      source: function(request, response) 
      {   
      var input = $("#bob").val(); 

      $.ajax({ 
       type: "GET", 
       dataType: "application/xml", 
       url:"http://localhost:8888/solr-intranet-int/intranet_users/suggest?q=surname_t:*" + input + "*", 
       success: function(data) 
        { 
         $('input.suggest-user').removeClass('ui-autocomplete-loading'); 

         response($.map(data, function(item) { 
          // todo 
         })); 
        }, 
       error: (function(data) { 
        $("#bob").removeClass('ui-autocomplete-loading'); 
       }) 
      }); 
      }, 
      minLength: 3, 
      open: function() {}, 
      close: function() {}, 
      focus: function(event,ui) {}, 
      select: function(event, ui) {} 
     }); 
    }); 

bekam ich die erwarteten Fehler CORS und so eingestellt, um diese mit dem folgend in TOMCAT

<filter> 
    <filter-name>CorsFilter</filter-name> 
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
    <init-param> 
    <param-name>cors.allowed.origins</param-name> 
    <param-value>http://localhost:5757</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.allowed.methods</param-name> 
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.allowed.headers</param-name> 
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers, Authorization</param-value> 
    </init-param> 
    <init-param> 
    <param-name>cors.exposed.headers</param-name> 
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials, Authorization</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Ich bin nicht sicher zu beheben versuchen, wie wir weiter vorgehen. Die gesamte Dokumentation I bezieht sich auf Jetty in solr finden 5, weil sie von tomcat bewegt haben weg, aber es muss weg Header der annehmen bekommen, zur Zeit ich den folgenden Fehler in meinem Browser erhalten:

XMLHttpRequest kann nicht geladen werden http://localhost:8888/solr-intranet-int/intranet_users/suggest?q=surname_t: jones. Kein 'Access-Control-Allow-Origin'-Header ist auf der angeforderten -Ressource vorhanden. Herkunft 'http://localhost:5757' ist daher nicht erlaubt Zugriff.

Antwort

0

Am Ende habe ich es gelöst durch einen Dritten cors-Filter: ich dies eher am solr Anwendungsebene verwendet als am Tomcatbediener Ebene:

<filter> 
    <filter-name>CORS</filter-name> 
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 
     <init-param> 
       <param-name>cors.allowOrigin</param-name> 
       <param-value>*</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
    <filter-name>CORS</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 
+0

weiß, dass ich die * ist eine schlechte Idee für die Produktion :) –

+1

jsonp ist auch eine Möglichkeit, dies zu tun, wie es von solr out of the box (json.wrf) unterstützt wird. –

+0

jsonp ist nicht etwas, was wir verwenden möchten, aber danke. –