2009-03-10 6 views
12

Ich verwende die Feder-Sicherheit zu eingeschränkten URLs. Ich versuche, Anmelde- und Anmeldeseite auf derselben Seite bereitzustellen.Spring Security: So erhalten Sie die anfängliche Ziel-URL

Bei der Anmeldung wird die Federsicherheit auf die eingeschränkte Seite übertragen. Ich versuche jedoch, die Ziel-URL an den Anmeldeprozess zu übergeben, sodass wir nach der Anmeldung auf die eingeschränkte Seite umleiten können.

So erhalten Sie die tatsächliche URL, von der der Benutzer umgeleitet wurde.

Irgendwelche Ideen?

+0

Ich habe Feder 3.1.1.RELEASE konfiguriert und versucht, die Lösung von euch geschrieben verwenden, aber irgendwie i Sitzung erhalten als "null". Irgendeine Idee über wahrscheinlichen Grund für dieses Verhalten ?? – Prabhat

+0

versuchen Sie 'SavedRequest savedRequest = (SavedRequest) session.getAttribute (" SPRING_SECURITY_SAVED_REQUEST ");' –

+0

Versuchen Sie dieses: SavedRequest savedRequest = new HttpSessionRequestCache(). GetRequest (Anforderung, Antwort); – Jesfre

Antwort

13

So habe ich die URL von Spring Security erhalten.

 
SavedRequest savedRequest = (SavedRequest)session.getAttribute(
    AbstractProcessingFilter.SPRING_SECURITY_SAVED_REQUEST_KEY); 
String requestUrl = savedRequest.getFullRequestUrl(); 
12

Sie bewegten die Dinge ein wenig im Frühling Sicherheit 3.0, so funktioniert das obige Code-Snippet nicht mehr. Dies funktioniert der Trick, aber:

protected String getRedirectUrl(HttpServletRequest request) { 
    HttpSession session = request.getSession(false); 
    if(session != null) { 
     SavedRequest savedRequest = (SavedRequest) session.getAttribute(WebAttributes.SAVED_REQUEST); 
     if(savedRequest != null) { 
      return savedRequest.getRedirectUrl(); 
     } 
    } 

    /* return a sane default in case data isn't there */ 
    return request.getContextPath() + "/"; 
} 
+1

Als eine Anmerkung, WebAttributes ist nicht verfügbar, bis 3.0.3 – yincrash

+6

'WebAttributes.SAVED_REQUEST' nicht mehr in 3.1 vorhanden ist, jedoch [diese Lösung] (http://stackoverflow.com/a/5389357/535646) funktioniert. –

+5

@TilmanHausherr WebAttributes.SAVED_REQUEST kann in Spring 3.1 durch die Zeichenfolge "SPRING_SECURITY_SAVED_REQUEST" ersetzt werden, die die obige Lösung wieder funktionsfähig macht. – TimS

2

mit Feder Sicherheit 4.1.4:

@Override 
public void onAuthenticationSuccess(HttpServletRequest request, 
     HttpServletResponse response, Authentication authentication) 
     throws IOException, ServletException { 

    SavedRequest savedRequest = new HttpSessionRequestCache().getRequest(request, response); 
    if (savedRequest != null) { 
     response.sendRedirect(savedRequest.getRedirectUrl()); 
    } 
    else{ 
     response.sendRedirect("some/path"); 
    } 
} 
Verwandte Themen