【Shiro】 7.RememberMe(记住我)功能
https://www.cnblogs.com/starktan/p/9608692.html
问题: https://blog.csdn.net/koproblem/article/details/70046240
如果不是电商支付类的网页,我们一般可以使用类似于“记住当前用户的功能”。主要原理:登录后,把登录的Cookie写到客户端并保存下来,这样下次访问时,浏览器任然能记住你,能够正常访问这些网页。
Shiro提供了RememberMe的功能。具体应该怎么用呢?
前提
已经学会SpringBoot配置Shiro进行认证和授权:https://www.cnblogs.com/luyj00436/p/18432852
完成一些登录功能。
步骤
1. 登录页面加入勾选框(login.html页面)
记住我:<input type="checkbox" name="rememberMe"><br />
2. 在Shiro的配置文件中,添加RememberMe的配置。(给安全管理器添加cookie设置)
/** *Cookie */ @Bean public SimpleCookie rememberMeCookie() { //这个参数是cookie的名称,对应前端的checkbox的name = rememberMe SimpleCookie simpleCookie = new SimpleCookie("rememberMe"); //如果httyOnly设置为true,则客户端不会暴露给客户端脚本代码,使用HttpOnly cookie有助于减少某些类型的跨站点脚本攻击; simpleCookie.setHttpOnly(true); //记住我cookie生效时间,单位是秒 simpleCookie.setMaxAge(600); return simpleCookie; } /** * cookie管理器; */ @Bean public CookieRememberMeManager rememberMeManager() { CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); //rememberme cookie加密的密钥 建议每个项目都不一样 默认AES算法 密钥长度(128 256 512 位),通过以下代码可以获取 //KeyGenerator keygen = KeyGenerator.getInstance("AES"); //SecretKey deskey = keygen.generateKey(); //System.out.println(Base64.encodeToString(deskey.getEncoded())); byte[] cipherKey = Base64.decode("wGiHplamyXlVB11UXWol8g=="); cookieRememberMeManager.setCipherKey(cipherKey); cookieRememberMeManager.setCookie(rememberMeCookie()); return cookieRememberMeManager; } @Bean public SecurityManager securityManager() { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(new MyShiroRealm()); securityManager.setRememberMeManager(rememberMeManager()); return securityManager; }
3.修改拦截器和页面
filterChainDefinitionMap.put("/", "user");
filterChainDefinitionMap.put("/index", "user");
<P><input type="checkbox" name="rememberMe" />记住我</P>
有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。