📅  最后修改于: 2023-12-03 14:59:20.903000             🧑  作者: Mango
Apache Shiro Remember Me 是一个用于在无法访问用户凭证的情况下记住用户身份的机制。在用户登录成功后,为了避免每次访问资源时都需要重新登录,我们可以使用 Remember Me 机制来保存用户身份信息,并在下一次访问时自动登录。
Apache Shiro Remember Me 的工作流程如下:
用户登录成功后,系统会生成一个随机的 token(记住我 token),并将该 token 存储到用户的 Cookie 中,并保存到数据库中。
用户在下一次访问系统时,系统会自动从用户的 Cookie 中获取记住我 token,并通过 token 查询数据库中是否存在该 token,如果存在,则验证 token 是否过期,如果没有过期,则系统会自动为用户登录,加载用户的权限信息,完成用户身份的认证。
Apache Shiro Remember Me 的配置非常简单,只需在 shiro.ini 或者 shiro-config.xml 文件中添加如下配置:
# Shiro Remember Me cookie name, the default is JSESSIONID
shiro.authc.rememberMe.cookie.name = rememberMe
# Cookie max age time, the default is one month
shiro.authc.rememberMe.cookie.maxAge = 2592000
# Remember Me encryption key
shiro.authc.rememberMe.cipherKey = kPH+bIxk5D2deZiIxcaaaA==
# Remember Me Cookie decode value
shiro.authc.rememberMe.cookie.value = base64 encoded cookie value
其中,rememberMe 是 Cookie 的名称,maxAge 是 Cookie 的过期时间(默认为一个月),cipherKey 是加密串,value 是 Cookie 的值。
Remember Me 的具体实现代码如下:
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
token.setRememberMe(true);
Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token);
<bean id="mySecurityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="rememberMeManager" ref="cookieRememberMeManager"/>
</bean>
<bean id="cookieRememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
<property name="cookie" ref="rememberMeCookie"/>
</bean>
<bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<constructor-arg value="rememberMe"/>
<property name="maxAge" value="2592000"/>
</bean>
<bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
<constructor-arg value="rememberMe"/>
<property name="httpOnly" value="true"/>
<property name="maxAge" value="2592000"/>
</bean>
<bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
<property name="cipherKey" value="KjI9eMfQTphOJY875hir4A=="/>
<property name="cookie" ref="rememberMeCookie"/>
</bean>
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="rememberMeManager" ref="rememberMeManager"/>
<property name="realm" ref="myRealm"/>
</bean>
以上是 Apache Shiro Remember Me 的简单介绍,希望对各位程序员有所帮助!