Перенаправить на предыдущий URL после выхода - PullRequest
0 голосов
/ 06 февраля 2011

На login, пользователь может быть перенаправлен на страницу, которая запрашивала вход в систему, используя значение url, установленное в flash.

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

Ответы [ 3 ]

8 голосов
/ 06 февраля 2011

(просто поясняю комментарий Алленскда)

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

String refererUrl = request.getHeader("referer")
2 голосов
/ 25 февраля 2011

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

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> (...)

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

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

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

2 голосов
/ 06 февраля 2011

спасибо всем за комментарии к вопросу, с предложениями 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...