2011-02-06 2 views
0

На странице login пользователь может быть перенаправлен на страницу с запросом на вход с использованием значения url, установленного в flash.Перенаправление на предыдущий URL-адрес после выхода из системы

Возможно ли использовать один и тот же вариант использования, перенаправить пользователя на страницу, которая запросила выход из системы после выхода из системы?

+0

У вас есть страницы, требующие выхода из системы? Ну, как вы сказали, эти страницы добавляют параметр url к запросу, '? Page =/somepage.html)' и используют его для перенаправления. –

+0

Также вы можете сохранить этот URL-адрес в файлах cookie через модем flash-javascipt. – kirilloid

+0

Что используется для входа/выхода из системы? У вас есть собственные действия или вы используете защищенный модуль? – Codemwnci

ответ

2

благодарит всех вас за комментарии к вопросу, связанные с предложениями Johan Sjöberg, даже stackoverflow его использует ;-), проверьте ссылку выхода.

На шаблоне

<a href="@{Secure.logout2(request.url)}">logout</a> 

В Secure.java я добавил logout2

public static void logout2(String returnUrl) throws Throwable { 
    flash.put("returnUrl", returnUrl == null ? "/" : returnUrl); 
    logout(); 
} 

и модифицированный logout

public static void logout() throws Throwable { 
    session.clear(); 
    response.removeCookie("rememberme"); 
    Security.invoke("onDisconnected"); 
    flash.success(Messages.get("secure.logout", "You have been successfully logged out")); 

    String returnUrl = flash.get("returnUrl"); 
    redirect(returnUrl == null ? "/" : returnUrl); 
} 
+0

Я бренд-шпаргалка-новая игра! (но абсолютно любя его!), так что, возможно, я вне базы, но разве это обычно не считается плохой практикой, чтобы напрямую изменить класс фреймворка ??? Я бы ожидал решения, которое переопределяет определенную особенность класса framework. Например, что происходит, когда play # secure-module получает обновление, которое вам нужно? Вам нужно будет убедиться, что вы полируете свой код. Посмотрите мое решение, как я решил эту проблему. – Bane

8

(комментарий Только выяснении allenskd в)

Многое зависит от того, как реализован выход в систему, но если это просто контроллер или jsp, вам не нужно передавать ему URL. Вы можете использовать заголовок реферера.

String refererUrl = request.getHeader("referer") 
2

Найдя другие ответы здесь неприемлем (или просто совершенно не подходит мой подход) я пингуется-далеко, пока я не придумал что-то мне больше нравится. Вот что я сделал:

public class Security extends Secure.Security { 

    /* Overrides the same method from Secure.Security. 
    * I only needed to redirect back the home-page so I just 
    * hard-coded the redirect-url here; but you could also have 
    * directed your logout-link to #logout2(String url) where you do a 
    * flash#put() and then here do a flash#get() and redirect to 
    * to that url instead (see n002213f's answer for more detail; 
    * but I thought it bad-practice to do the other half of his 
    * answer -- directly modifying the #logout() method of the 
    * play#secure-module) 
    static void onDisconnected() { 
     redirect("/"); 
    } 

} 


index.html: 
    (...) <a href="logout">Logout</a> (...) 

Так что же происходит в том, что игра по умолчанию # безопасных # выход из системы(), то называется и в конце выхода из системы-процесс это пожары Secure # Security # onDisconnected - который преодолено и перенаправляется на домашнюю страницу. Эта встроенная система безопасности этого способа не обходится, поэтому вы не рискуете нарушить свою безопасность, вы также не изменяете напрямую код защищенного модуля игры #, который означает, что когда он обновлен, вы не окажетесь в маринуйте, и все же вы достигаете своего результата: не перенаправляетесь на страницу безопасного доступа по умолчанию #, а вместо этого переходите прямо на главную страницу.

Если кто-то более приправил игру! чем я вижу проблему с этим (или если моя критика других решений необоснованна), я бы хотел услышать!

В противном случае я считаю, что это самый элегантный и простой способ достижения цели.

Смежные вопросы