2013-07-05 3 views
13

Ich bin ein Neuling für REST Webservice und habe gerade meinen ersten Webservice erstellt.
In meinem Service kann der Benutzer ein Profil über ein einfaches Formular erstellen, das seinen gewünschten Benutzernamen und sein Passwort angibt.Wie verwende ich Basic HTTP Auth mit REST Webservice (Java + Jersey)?

Jetzt, wie Anmeldeinformationen zu überprüfen, wenn der Benutzer sich anmeldet ??
Ich meine, ich habe eine einfache Form, die validiert Benutzer hat sich angemeldet, aber wie Benutzer zu validieren, wenn er verschiedene Profil Operation von hinzufügen/aktualisieren/löschen ??

Zum Beispiel:
In FB Sie anmelden und es speichert einen Cookie, der Ihre Anmeldeinformationen hat und wenn Sie Operationen wie "Post Status", Nachricht ein Freund ... etc ... es fragt nicht für Ihre Anmeldeinformationen nicht mehr, weil es ein Cookie hat, in dem Ihre Anmeldeinformationen vorhanden sind und es nur verwendet ...

Aber in REST verwenden wir kein Cookie, also ist die nächste Option HTTP-Header. Und ich möchte wissen, wie Benutzerdaten via HTTP-Header .ie
Basic HTTP Auth

+0

Brauchen Sie mehr Feedback dazu? Wenn nicht und meine Antwort war hilfreich für Sie, könnten Sie meinen Beitrag zu dieser Frage akzeptieren. Greetz :) – benjiman

Antwort

29

Client Side

Um die Anmeldeinformationen an den Sie den HTTP-Header Authorization verwenden API zu senden unter Angabe der Anmeldeinformationen senden und empfangen in Form von Basic username:password. Der Benutzername: password Die Zeichenfolge muss mit einem Codierungsschema namens Base64 codiert werden. So ein Beispiel Header wie folgt aussehen könnte:

Authorization: Basic d2lraTpwZWRpYQ== 

Wie der Rest-Spezifikation besagt, dass der Client-Server-Kommunikation staatenlos sein sollte, müssen Sie bei jeder Anfrage den Header mit den Anmeldeinformationen enthalten. Normalerweise verwenden Sie auf der Client-Seite einen Sitzungscookie, um den Benutzer zu identifizieren, sodass er seine Anmeldeinformationen nicht bei jeder Anfrage eingeben muss.

Server Side

die Anmeldeinformationen in Ihrem Jersey REST-Service zu überprüfen, müssen Sie alle eingehenden Anfragen fangen und abfangen. Jersey bietet hierfür ein Konzept namens ContainerRequestFilters an.

<init-param> 
    <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name> 
    <param-value>your.package.BasicAuthFilter</param-value> 
</init-param> 

Die referenzierten Klasse BasicAuthFilter Bedürfnisse implementieren Trikots ContainerRequestFilter Schnittstelle und überschreiben die public ContainerRequest filter(ContainerRequest request) Methode: Wenn Sie zum Beispiel Tomcat verwenden Sie Filter dieser Art in Ihrem Servlet-Definition in Ihrem web.xml wie folgt hinzufügen könnte. Innerhalb des Verfahrens werden Sie im Grunde Folgendes tun:

  • die Base64 codiert Anmeldeinformationen aus dem Autorisierungs-Header der Anforderung holen
  • decodiert (dh mit javax.xml.bind.DatatypeConverter.parseBase64Binary())
  • Ihre UserDao (oder andere Datenquelle Provider) um zu überprüfen, ob die Berechtigungsnachweise gültig sind
  • Geben Sie den Statuscode 401 Unauthorized zurück, wenn die Validierung fehlschlägt (d. hthrow new WebApplicationException(Status.UNAUTHORIZED))
  • wenn die Anmeldeinformationen gültig sind, bringen Sie einfach die Anfrage, um es an die Jersey Ressource zu delegieren, die für den Umgang mit ihm

Sie verantwortlich ist ein sehr gutes Beispiel in this Blog-Post zu finden.

+2

Das Beispiel in dem angegebenen Link funktioniert nur mit JERSEY 1.x. Und es funktioniert nicht mit 2.X. – lonelyloner

+1

Der verlinkte Blogbeitrag enthält einen Link zu einem Beispiel für Jersey 2.x: https://simplapi.wordpress.com/2015/09/17/jersey-jax-rs-implements-a-http-basic-auth-decoder -für-2-x-Zweig / – CalumMcCall

Verwandte Themen