【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>

 

posted @ 2024-10-15 08:58  陆陆无为而治者  阅读(67)  评论(0编辑  收藏  举报