2009-03-10 3 views
12

Я использую весеннюю безопасность для ограниченных URL-адресов. Я пытаюсь предоставить страницу регистрации и входа в систему на той же странице.Весенняя безопасность: как получить начальный целевой URL

При входе в систему весна безопасности переходит на ограниченную страницу. Однако я пытаюсь передать целевой URL-адрес процессу регистрации, так что после регистрации мы можем перенаправить на ограниченную страницу.

Как получить фактический URL-адрес, с которого был перенаправлен пользователь.

Любые идеи?

+0

Я весной 3.1.1.RELEASE настроен и пытался использовать решение, отправленное вами, ребята, но как-то я получить сеанс как «null». Любая идея о вероятной причине такого поведения? – Prabhat

+0

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

+0

Попробуйте следующее: SavedRequest savedRequest = new HttpSessionRequestCache(). GetRequest (запрос, ответ); – Jesfre

ответ

13

Вот как я получил URL-адрес от Spring Security.

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

Они немного переместились в весенней безопасности 3.0, поэтому приведенный выше фрагмент кода больше не работает. Это делает трюк, хотя:

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

В качестве примечания, WebAttributes недоступен до 3.0.3 – yincrash

+6

'WebAttributes.SAVED_REQUEST' больше не существует в 3.1, однако [это решение] (http://stackoverflow.com/a/5389357/535646) работает. –

+5

@TilmanHausherr WebAttributes.SAVED_REQUEST может быть заменен на строку «SPRING_SECURITY_SAVED_REQUEST» весной 3.1, которая делает это решение снова работоспособным. – TimS

2

с пружинной безопасностью 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"); 
    } 
}