如何在 Play 框架中存储 Cookie?

2022-09-03 12:28:00

我想使用Play Framework存储一个身份验证令牌,该令牌的寿命超过当前会话,可能是几天甚至几周 - 这样用户就不必每次都登录。

建议使用什么方法执行此操作?


答案 1

响应对象有一个方法 setCookie,它完全可以执行所需的操作

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

请记住,存储在cookie中的数据未加密,因此如果要对其进行加密,请使用该方法。它使用 play 框架密钥对代码进行签名。Crypto.sign

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


答案 2

我还建议您看看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();
}

帕斯卡


推荐