9.4.3 启用 Remember-me 功能

对于应用程序来讲,能够对用户进行认证是非常重要的。但是站在用户的角度来讲,如果应用程序不用每次都提示他们登录是更好的。这就是为什么许多站点提供了 Remember-me 功能,你只要登录过一次,应用就会记住你,当再次回到应用的时候你就不需要登录了。

Spring Security 使得为应用添加 Remember-me 功能变得非常容易。为了启用这项功能,只需在 configure() 方法所传入的 HttpSecurity 对象上调用 rememberMe() 即可。

@Override
protected void configure(HttpSecurity http) throws Exception {
  http
    .formLogin()
    .loginPage("/login");
    .and()
    .rememberMe()
    .tokenValiditySeconds(2419200)
    .key("spittrKey")
    ...
}

在这里,我们通过一点特殊的配置就可以启用 Remember-me 功能。默认情况下,这个功能是通过在 cookie 中存储一个 token 完成的,这个 token 最多两周内有效。但是,在这里,我们指定这个 token 最多四周内有效(2,419,200秒)。

存储在 cookie 中的 token 包含用户名、密码、过期时间和一个私钥 —— 在写入 cookie 前都进行了 MD5 哈希。默认情况下,私钥的名为 SpringSecured,但在这里我们将其设置为 spitterKey,使它专门用于 Spittr应用。

如此简单。既然 Remember-me 功能已经启用,我们需要有一种方式来让用户表明他们希望应用程序能够记住他们。为了实现这一点,登录请求必须包含一个名为 remember-me 的参数。在登录表单中,增加一个简单复选框就可以完成这件事情:

<input id="remember_me" name="remember-me" type="checkbox" />
<label for="remember_me" class="inline">Remember me</label>

在应用中,与登录同等重要的功能就是退出。如果你启用 Rememberme 功能的话,更是如此,否则的话,用户将永远登录在这个系统中。我们下面将看一下如何添加退出功能。

Last updated