2016-04-05 8 views
1

Ich versuche, Kors auf Jersey mit Tomcat mit Basis-Authentifizierung zu implementieren. Die Authentifizierung wird unter Verwendung eines Bereichs konfiguriert, der die Daten der Datenbank abruft und mit dem angegebenen Benutzer und dem angegebenen Kennwort vergleicht.Wie funktioniert CORS Filter in Jersey REST mit Basic Authentication?

Alle meine Ressourcen arbeiten normal ohne Cross-Herkunft HTTP-Anfrage, ich habe mit Soapui und eine von mir selbst erstellte Android-Anwendung getestet. Das Problem tritt auf, wenn ich versuche, den REST-Webservice mit jQuery und ajax zu verwenden, der ein Options-Preflight ohne Authentifizierungsdaten sendet und der Server mit einem nicht autorisierten 401-Fehler antwortet.

Ich habe versucht, die Folge zu tun:

* Implementieren eines Filters Custom Container dass cors Anfrage, und nichts zu behandeln. Verwenden Sie den Catalina Cors Filter wie von der Website vorgeschlagen http://enable-cors.org, und nichts.

* Verwenden Sie den Cors-Filter, der von: http://software.dzhuvinov.com/cors-filter.html entwickelt wurde. Nichts.

* Verwenden Sie den Filter der Servlet-Spezifikation mit und ohne WebFilter-Anmerkung und nichts.

* Erstellen Sie den Optionsservice mit der Annotation @PermitAll.

In all diesen Versuchen habe ich auch die web.xml konfiguriert. Ich verwende Tomcat 7.0.21, Jersey 2.22.2, Hibernate, MYSQL, JDK 7 und Maven.

Ich denke, dass die grundlegende Auth das Problem ist, sollte ich vielleicht das OAuth 2.0 versuchen? Gibt es eine Möglichkeit, cors mit dem Basic Auth zu arbeiten? Wie weiter?

+0

Mögliches Duplikat von [Umgang mit CORS mit JAX-RS mit Jersey] (http://stackoverflow.com/questions/28065963/how-to-handle-cors-using-jax-rs-with-jersey) –

+0

und: http://stackoverflow.com/questions/18499465/cors-and-http-basic-auth –

+0

Ist nicht, weil ich diese Lösungen vorher versucht habe und wie ich sagte, keine Wirkung. Der Server fordert immer noch grundlegende Auth für die Optionsmethode, so dass sogar, dass ich den Zugriffsberechtigungsheader sende und die Filter implementiere, der Server immer noch mit einem 401-Fehler antwortet, weil keine Autorisierungsdaten vom Ajax-Client gesendet wurden –

Antwort

0

Der einfachste Weg, die für mich gearbeitet wurde folgendes zu tun:

1) Fügen Sie diesen Code auf Ihre web.xml in der Nähe der Spitze gerade innerhalb des <web-app .. > Tag

<filter> 
    <filter-name>CORS</filter-name> 
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 
</filter> 
<filter-mapping> 
     <filter-name>CORS</filter-name> 
     <url-pattern>/*</url-pattern> 
</filter-mapping> 

2 importieren) zwei Bibliotheken über maven in pom.xml

<dependency> 
    <groupId>com.thetransactioncompany</groupId> 
    <artifactId>java-property-utils</artifactId> 
    <version>1.9.1</version> 
</dependency> 

<dependency> 
    <groupId>com.thetransactioncompany</groupId> 
    <artifactId>cors-filter</artifactId> 
    <version>1.9.1</version> 
</dependency> 

Viel Glück!

Verwandte Themen