2012-03-27 3 views
2

Ich habe ein anständiges Login-System mit Spring 3 Sicherheit arbeiten.Wie fügt man der Sitzung eine Nachricht hinzu, wenn eine Anmeldung in der Spring-Sicherheit erforderlich ist?

Wenn ein Benutzer versucht, vor der Anmeldung auf eine sichere Seite zuzugreifen, wird er zur Anmeldeseite weitergeleitet und nach erfolgreicher Anmeldung wird er auf die Seite umgeleitet, auf die er zuvor zuzugreifen versucht hat. Das ist fast genau das, was ich will.

Was ich auch möchte, ist eine spezielle Fehlermeldung auf der Anmeldeseite, die dem Benutzer erklärt, dass er dorthin weitergeleitet wurde, weil er versucht hat, auf einen sicheren Bereich zuzugreifen. Wie kann ich das tun (ohne diese Fehlermeldung auf der Anmeldeseite für Personen anzuzeigen, die zuvor noch nicht versucht haben, auf eine sichere Seite zuzugreifen)?

Vielen Dank!

P.S. Ich habe gelesen http://static.springsource.org/spring-security/site/docs/3.0.x/reference/springsecurity-single.html#getting-started und viele Beiträge auf dieser Seite und andere, aber habe nicht die Lösung gefunden.

Antwort

0

Verwenden Sie Jsp? Dann könnte etwas wie this nützlich sein.
Möchten Sie Ihre Fehlermeldung von Spring Security anpassen? Schauen Sie sich here an.

+0

Ihre Antwort wäre wahrscheinlich gearbeitet, aber ich es früher gelöst, indem die Authentifizierung-failure-URL zu einer bestimmten Methode zeigt, dass eine Fehlermeldung an die Sitzung fügt hinzu: ' ... ' und in LoginController: '@RequestMapping (method = RequestMethod.GET) public String fehlgeschlagen (HttpSessio n Sitzung) { flashMessageHelper.addError (MessageKey.SIGN_IN_FAILURE, Sitzung); Rückgabe PathHelper.getRedirectToPath (linkHelper.getHome()); } ' – Ryan

0

Auf Ihrer Login-JSP-Seite können Sie einen HTTP-Header-Referer (z. B. mit jstl - ${header['referer']}) abrufen, der Ihnen sagen würde, auf welche Seite der Benutzer zugreifen wollte, bevor er auf diese Anmeldeseite weitergeleitet wurde.

0

Eine Fehlermeldung auf der Anmeldeseite wird automatisch von Spring ausgeführt. Sie können sehen, wie es diskutiert wird here. Ich denke, dass es mehr darum geht, einen Login-Fehler als "Bad credentials" anzuzeigen, aber bedenken Sie es trotzdem.

In Ihrem Fall kann die Anzeige einer Fehlermeldung, die sich auf den Zugriff verweigert bezieht, erfolgen, indem Sie einfach die Seite "Zugriff verweigert" in der Sicherheitskonfiguration für den Frühling definieren.

Normalerweise können Sie so etwas wie dies sehen:

<http auto-config="true" access-denied-page="/403.jsp"> 
.... 
</http> 

aber auch Sie können diese und Kontrolle im Login-jsp tun, wenn myError Variable in der Anfrage kommt:

<http auto-config="true" access-denied-page="/login.jsp?myError=access-denied"> 
.... 
</http> 
0

I don‘ Ich denke, dass eine der Antworten hier eine saubere generische Lösung für das ursprüngliche Problem bietet. Ich verstehe die Lösung von OP nicht und es mag spezifisch für seine Situation sein.

Wenn ein Benutzer auf eine sichere URL klickt, leitet Spring den Benutzer zur Anmeldeseite um. Die ursprüngliche Anfrage wird in der Sitzung gespeichert. Und Spring übergibt keinen der Parameter in der ursprünglichen Anfrage an die Anmeldeseite.

Sie können so etwas wie die folgenden zu dem login.jsp hinzufügen:

<% 
     if((SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST") != null && ((SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST")).getParameterMap().get("LOGINMSG") != null){ 
    out.println('<%= ((SavedRequest)session.getAttribute("SPRING_SECURITY_SAVED_REQUEST")).getParameterMap().get("LOGINMSG")[0]%>');  
     } 
     %> 

Wo LOGINMSG der Benutzer Login-Nachricht benutzerdefinierte Ende ist, dass Sie auf die ursprüngliche sichere URL angehängt.

Ich hoffe, dass das Frühjahrs-Sicherheitsteam diesen Ansatz einschlägt und validiert (oder ungültig macht).

+0

Hallo Prashant. Ich versuche, diese genaue Lösung zum Laufen zu bringen. Meine Frage ist, wie man Spring dazu bringt, den Java-Code aufzurufen, der LOGINMSG in die Sitzung bringen würde, damit der JSP ihn aufheben kann. Ich bin sicher, es ist eine Art Filter, aber es ist kein Authentifizierungsfilter. Wie kann ich Spring konfigurieren, um meinen Java-Code aufzurufen, der die zusätzlichen Informationen für die Sitzung auf der Anmeldeseite speichert? – Jake