记住我
登录认证的区别
- Subject.isAuthenticated()表示用户进行了身份验证登录Subject.isRemembered()表示用户是通过记住我登录的,此时可能并不是真正你在访问,可能是你的朋友在使用电脑,或者你的cookie被盗取
- 二者选一,即isAuthenticated() == true,则isRemembered() == false,反之一样
在一般的网页,只要isRemembered()为真即可,但是在特殊的网页,比如订单支付页面,则必须isAuthenticated()为真
设置rememberMe也很简单,只需要使用token.setRememberMe(true);即可,这个token即是UsernamePasswordToken对象,一般通过前端的checkbox就可以判断是否使用记住我功能,然后再配合user过滤器使用就可以实现Rememberme访问被设置的网页,而需要认证的网页可以使用authc过滤器来设置
设置记住我的cookie相关信息
在shiro配置类中配置
/** * 设置cookie的生成模板,cookie名,生存时间等 * @return */ @Bean public SimpleCookie rememberMeCookie() { // cookie名 SimpleCookie rememberMe = new SimpleCookie("rememberMe"); // 设置cookie的生存时间,以秒为单位 rememberMe.setMaxAge(10); return rememberMe; } /** * cookie管理对象 * 生成rememberMe管理器,而且要将这个rememberMe管理器设置到securityManager中 * @return */ @Bean public CookieRememberMeManager rememberMeManager() { CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager(); cookieRememberMeManager.setCookie(rememberMeCookie()); // rememberMe cookie加密的秘钥,默认AES算法,秘钥长度(128 256 512位) cookieRememberMeManager.setCipherKey(Base64.decode("asdsa--543532%^%$&%&")); return cookieRememberMeManager; } @Bean public SecurityManager securityManager() { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); // 将remember管理器添加到securityManager中 securityManager.setRememberMeManager(rememberMeManager()); return securityManager; }