Frage

Wir haben eine JSF -Webanwendung, die die ACEGI -Sicherheit verwendet. Wir haben auch eine eigenständige Java -Swing -Anwendung. Eine Funktion der Swing -App besteht darin, die Homepage des Benutzers in einem Browserfenster zu laden.

Dazu verwenden wir derzeit Commons HTTPClient, um den Benutzer mit der Web -App zu authentifizieren:

String url = "http://someUrl/j_acegi_security_check";
HttpClient client = new HttpClient();
System.setProperty(trustStoreType, "Windows-ROOT");
PostMethod  method = new PostMethod(url);
method.addParameter("j_username", "USERNAME");
method.addParameter("j_password", "PASSWORD");
int statusCode = client.executeMethod(method);
if (statusCode == HttpStatus.SC_MOVED_TEMPORARILY ) {
    Header locationHeader= method.getResponseHeader("Location");
    String redirectUrl = locationHeader.getValue();
    BrowserLauncher launcher = new BrowserLauncher();
    launcher.openURLinBrowser(redirectUrl);
}

Dies gibt eine HTTP 302 -Umleitung zurück, aus der wir die Redirect -URL nehmen und sie mit Browserlauncher 2. öffnen. Die URL enthält die neue Sitzungs -ID, so etwas wie:

http://someUrl/HomePage.jsf;jsessionid=C4FB2F643CE48AC2DE4A8A4C354033D4

Das Problem, das wir sehen, ist, dass Acegi die Umleitung verarbeitet, aber eine AuthentifizierungskrediteNotfoundException auswirft. Es scheint, dass aus irgendeinem Grund die authentifizierten Anmeldeinformationen im Sicherheitskontext nicht gefunden werden können.

Hat jemand eine Idee, warum dies geschieht? Wenn jemand mehr Informationen braucht, werde ich gerne gerne verpflichten.

Danke vielmals,

Richard

War es hilfreich?

Lösung

Ich habe noch nie die Acegi/Springsicherheit gemacht, aber die Symptome sind klar genug: Einige wichtige Informationen fehlen in der Anfrage. Sie müssen zumindest alle Reaktionsüberschriften untersuchen, wenn es etwas Neues gibt, das Bedürfnisse im Kopf der nachfolgenden Anfrage zurückgegeben werden. Vielleicht ein weiterer Cookie -Eintrag, der die Acegi -Anmeldeinformationen darstellt.

Eine weitere Einschränkung ist jedoch, dass Sie in einer lokalen Browser -Instanz tatsächlich nicht nur die URL öffnen können, da es keine Möglichkeit gibt, die notwendigen Anforderungsscheiben entlang zu bestehen. Sie müssen Ihre Swing -Anwendung als integriertes Webbrowser fungieren lassen. ZB erhalten Sie eine HTML -Antwort in einem InputStream und rendern/anzeigen es irgendwie in einem Schwungrahmen. Ich würde überprüfen, ob es dafür keine vorhandene API gibt, da sie viel mehr Arbeit beinhalten würde, als Sie anfangs denken würden. (Untertreibung).

Andere Tipps

In diesem Fall können Sie grundlegende Authentifizierung durchführen und diesen Header in jeder Anfrage festlegen, anstatt die zu senden JSESSIONID:

AUTHORIZATION:Basic VVNFUk5BTUU6UEFTU1dPUkQ=

Das Token VVNFUK5BTUU6UEFTU1DPUKQ = ist der Benutzername und das Passwort codierte Basis64.
Beispiel:

scott:tiger 

ist:

c2NvdHQ6dGlnZXI=

Noch etwas: Verwenden Sie SSL.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top