2011-01-14 1 views
4

Früher war ich asked wenn es möglich war, die ursprüngliche Anfrage URL in der Anmeldeseite in Spring Security 2 zu erhalten. Stellt sich heraus, dass tatsächlich nicht helfen wird Ich brauche für die Umleitung auf die Formular-Login-Seite, dass diese als Request-Parameter darin eingebettet ist. Also, wenn ich habe:Machen Sie Spring-Sicherheit fügen Sie die Rückkehr zu URL in der Abfragezeichenfolge für die Login-Seite

<form-login login-page="/login.html" /> 

und versuchen, den Zugang /secure.html ich in /login.html?return_to=/secure.html wollen am Ende.

+0

ich diese Lösung ausprobiert und es funktioniert: https://stackoverflow.com/questions/34087954/ spring-security-how-to-add-a-redirect-abfrage-parameter-to-the-login-url-to-allow –

Antwort

7

Die Umleitung auf die Login-Formular durch die durchgeführt wird, AuthenticationEntryPoint. Für Spring Security 3.0+ wird dies normalerweise eine Instanz von LoginUrlAuthenticationEntryPoint sein. In 2.0 ist die entsprechende Klasse AuthenticationProcessingFilterEntryPoint.

Der Einstiegspunkt wird von der ExceptionTranslationFilter aufgerufen, die auch für das Zwischenspeichern der Anfrage verantwortlich ist. Sie können daher eine benutzerdefinierte AuthenticationEntryPoint schreiben, die zur URL der Anmeldeseite mit dem angehängten zusätzlichen Parameter (der die aktuelle Anforderungs-URI enthält) umgeleitet wird. Der Code sollte fast identisch mit der Standardimplementierung sein.

Sie können einen benutzerdefinierten AuthenticationEntryPoint in die Namespacekonfiguration unter Verwendung des entry-point-ref-Attributs für das Namespace-Element http einfügen. Wenn Sie einfache Bohnen verwenden, injizieren Sie es in die ExceptionTranslationFilter.

+0

Das klingt nach der richtigen Antwort, ich war auf diesem Weg, aber etwas schien nicht für mich zu funktionieren. Klingt so, als müsste ich es noch einmal versuchen. –

9

Ich denke, Sie müssen spring-security-redirect verwenden. Wenn Ihre URL die Form /login.html?spring-security-redirect=/secure.html hat, wird die Spring-Sicherheit bei erfolgreicher Anmeldung automatisch auf secure.html umgeleitet.

Ab Frühling 3.1.x funktioniert das nicht mehr out-of-the-box. Sie werden hinzufügen müssen:

authentication-success-handler-ref="simpleUrlAuthenticationSuccessHandler" 

... auf Ihre < form Login > Element und eine Bohne hinzufügen, die wie folgt aussieht:

<!-- Emulates the functionality of spring security 3.0.x by specifying the targetUrlParameter to be the value it 
    defaulted to in 3.0.x. As of 3.1.x this is null by default with no option to specify in <form-login> --> 
<beans:bean id="simpleUrlAuthenticationSuccessHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler"> 
    <beans:property name="useReferer" value="true"/> 
    <beans:property name="defaultTargetUrl" value="/account"/> 
    <beans:property name="targetUrlParameter" value="spring-security-redirect"/> 
</beans:bean> 
+0

Ich will nicht dorthin gehen ** nach ** Login, ich möchte gehen Das Login-Formular mit dieser URL als Parameter angehängt. –

+0

brilliant! genau das, was ich gesucht habe, danke. –

0

Wenn Sie eine eigene Login-Seite verwenden und wollen den Ansatz verwenden Raghuram vorgeschlagen, dass Sie auch ein verstecktes Feld mit dem Namen des targetUrlParameter in Form setzen müssen.

Für Ihr Beispiel (dh mit * return_to * URL-Parameter.), Es wäre so etwas wie:

<input type="hidden" name="spring-security-redirect" value="<c:out value="${param.return_to}" escapeXml="true" />" />