📜  apache shiro remember me 是如何工作的 (1)

📅  最后修改于: 2023-12-03 15:29:26.138000             🧑  作者: Mango

Apache Shiro Remember Me 是如何工作的

Apache Shiro 是一个Java安全框架,提供了身份验证(Authentication)、授权(Authorization)、加密(Cryptography)和 Session 管理。其中 Remember Me 功能是一项非常有用的功能,可以实现用户登录后在一段时间内免登录访问应用程序。

Remember Me 功能介绍

当用户使用 Remember Me 功能登录系统时,系统会发放一个 Cookie,并通过 Cookie 存储该用户的身份标识信息。当用户关闭浏览器,再次访问应用程序时,如果该 Cookie 没有过期,则无需再输入用户名和密码就能直接访问系统。

Remember Me 实现

Apache Shiro Remember Me 功能的实现,需要完成以下几个步骤:

1. 配置 Remember Me

在 shiro.ini(或 shiro.xml)中添加 Remember Me 相关的配置,如下:

[main]
# remember me
mySecurityManager.rememberMeManager = org.apache.shiro.web.mgt.CookieRememberMeManager
mySecurityManager.rememberMeManager.cookie = rememberMe
mySecurityManager.rememberMeManager.cipherKey = kPH+bIxk5D2deZiIxcaaaA==

其中,rememberMeManager 配置项指定记住我管理器的实现类。这里使用了 CookieRememberMeManager,这是一个实现了 Remember Me 功能的管理器。cookie 配置项定义了存储 Remember Me 信息的 Cookie 的名称。cipherKey 配置项定义了加密存储在 Cookie 中的 Remember Me 信息的密钥。

2. 配置过滤器

在 shiro.ini(或 shiro.xml)中为应用程序添加 Remember Me 过滤器,如下:

[filters]
rememberMe = org.apache.shiro.web.filter.remember.RememberMeFilter
3. 配置 URL 规则

在 shiro.ini(或 shiro.xml)中添加 URL 规则,将需要启用 Remember Me 的 URL 匹配到 Remember Me 过滤器,如下:

[urls]
/login.jsp = anon
/logout = logout
/** = user, rememberMe
4. 使用 Remember Me 功能

在登录时,勾选 Remember Me 复选框即可使用 Remember Me 功能。

UsernamePasswordToken token = new UsernamePasswordToken(username, password);
token.setRememberMe(true); // 启用 Remember Me
try {
    subject.login(token);
} catch (AuthenticationException e) {
    // 处理身份验证失败的情况
}
总结

Apache Shiro Remember Me 是一项非常有用的功能,可以使用户在登录后免登录访问应用程序。通过配置 Remember Me 的管理器和过滤器,加上一些必要的 URL 规则,就可以很方便地实现 Remember Me 功能。