Shiro中的记住我
Shiro中的记住我
前言
Shiro中使用记住我功能,可以使用户在下次登录时无需输入账号密码。例如支付宝、微信、QQ类似。
RememberMeManager
RememberMeManager。使用记住我的一个主要接口。
记住我(RememberMe)的实现主要是通过用户登录勾选记住我、通过RememberMeManager接口中的步骤将Cookie保存在本地客户端。在下次运行时通过扫描到对应的Cookie进行自动登录。
实现记住我的几个步骤
配置文件中创建SimpleCookie的生命周期Bean
@Bean public SimpleCookie rememberMeCookie(){ SimpleCookie simpleCookie =new SimpleCookie("rememberMe"); simpleCookie.setMaxAge(259200); return simpleCookie; }
创建RememberMeManager写入Cookie和Cookie加密
@Bean public RememberMeManager cookieRememberMeManager(){ CookieRememberMeManager cookie = new CookieRememberMeManager(); cookie.setCookie(rememberMeCookie()); //Cookie加密 cookie.setCipherKey(Base64.decode("2AvVhdsgUs0FSA3SDFAdag==")); return cookie; }
使用import org.apache.shiro.codec.Base64;的加密方式。如果使用了其他包中的加密方式可能导致没有Cookie加密的Key。发生java.lang.IllegalArgumentException: key argument cannot be null or empty.异常。
cookie加密的密钥 建议每个项目都不一样 默认AES算法 密钥长度(128 256 512 位)。秘钥不对也可能导致Unable to init cipher instance.异常 - 无法初始化密码实例。
将RememberMeManager方法写入到安全管理器
@Bean public SecurityManager securityManager(){ DefaultSecurityManager manager = new DefaultWebSecurityManager(); manager.setRealm(myRealm()); manager.setRememberMeManager(cookieRememberMeManager()); return manager; }
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Slikeの后花园!