记住我

登录认证的区别

  • 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;
}

 

posted @ 2018-12-12 11:44  Jin同学  阅读(167)  评论(0)    收藏  举报