Как мне сохранить куки в Play Framework? - PullRequest
15 голосов
/ 16 февраля 2011

Я хочу сохранить токен аутентификации в Play Framework, который переживает текущий сеанс, возможно, в течение нескольких дней или даже недель, чтобы пользователям не приходилось каждый раз входить в систему.

Каков рекомендуемый способ сделать это?

Ответы [ 4 ]

21 голосов
/ 16 февраля 2011

Объект ответа имеет метод setCookie, который делает именно то, что вы хотите

response.setCookie("playlonglivecookie", yourData, "14d");

Помните, что данные, хранящиеся в cookie, не зашифрованы, поэтому, если вы хотите зашифровать их, используйте метод Crypto.sign. Который подписывает ваш код, используя секретный ключ игровой платформы.

http://www.playframework.org/documentation/api/1.1.1/play/mvc/Http.Response.html#setCookie(java.lang.String,%20java.lang.String)

7 голосов
/ 16 февраля 2011

Я бы также посоветовал вам взглянуть на защищенный модуль, представленный в play-1.x / modules / secure, и файл Secure.java ... он предоставляет флажок «запомнить меня» в форме входа, который позволяетдержать вас в журнале вечность.

и код этой функции (особенно response.setCookie в конце):

public static void authenticate(@Required String username, String password, boolean remember) throws Throwable {
    // Check tokens
    Boolean allowed = false;
    try {
        // This is the deprecated method name
        allowed = (Boolean)Security.invoke("authentify", username, password);
    } catch (UnsupportedOperationException e ) {
        // This is the official method name
        allowed = (Boolean)Security.invoke("authenticate", username, password);
    }
    if(validation.hasErrors() || !allowed) {
        flash.keep("url");
        flash.error("secure.error");
        params.flash();
        login();
    }
    // Mark user as connected
    session.put("username", username);
    // Remember if needed
    if(remember) {
        response.setCookie("rememberme", Crypto.sign(username) + "-" + username, "30d");
    }
    // Redirect to the original URL (or /)
    redirectToOriginalURL();
}

Pascal

1 голос
/ 24 февраля 2017

При воспроизведении> 2,5 setCookie устарело.

Вы можете использовать вместо:

Http.Response.setCookie(Http.Cookie cookie)

Вы можете создать новый файл cookie с помощью компоновщика:

Http.Cookie.builder("name", "value").withMaxAge(15).build();

15 дней - срок годности

Ссылка: https://www.playframework.com/documentation/2.5.x/api/java/play/mvc/Http.Response.html#setCookie-play.mvc.Http.Cookie-

Пример: https://github.com/playframework/playframework/blob/master/framework/src/play/src/test/java/play/mvc/CookieBuilderTest.java

0 голосов
/ 16 февраля 2011

Объект ответа имеет несколько способов помочь вам. См. javadoc .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...