一、概述

Shiro 提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器,下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问,基本流程如下:

1、首先在登录页面选中 RememberMe 然后登录成功;如果是浏览器登录,一般会把 RememberMe 的Cookie 写到客户端并保存下来
2、关闭浏览器再重新打开;会发现浏览器还是记住你的;
3、访问一般的网页服务器端还是知道你是谁,且能正常访问;
4、但是比如我们访问淘宝时,如果要查看我的订单或进行支付时,此时还是需要再进行身份认证的,以确保当前用户还是你

二、认证和记住我

subject.isAuthenticated() 表示用户进行了身份验证登录的,即使用 Subject.login 进行了登录;

subject.isRemembered():表示用户是通过记住我登录的,此时可能并不是真正的你(如你的朋友使用你的电脑,或者你的cookie 被窃取)在访问的;

两者二选一,即 subject.isAuthenticated()==true,则subject.isRemembered()==false;反之一样。

三、建议

访问一般网页:如个人在主页之类的,我们使用user 拦截器即可,user 拦截器只要用户登录(isRemembered() || isAuthenticated())过即可访问成功;

访问特殊网页:如我的订单,提交订单页面,我们使用authc 拦截器即可,authc 拦截器会判断用户是否是通过Subject.login(isAuthenticated()==true)登录的,如果是才放行,否则会跳转到登录页面叫你重新登录。

四、实现

配置

    /*** rememberMe管理器, cipherKey生成见{@code Base64Test.java}*/@Beanpublic CookieRememberMeManager rememberMeManager(SimpleCookie rememberMeCookie) {CookieRememberMeManager manager = new CookieRememberMeManager();manager.setCipherKey(Base64.decode("Z3VucwAAAAAAAAAAAAAAAA=="));manager.setCookie(rememberMeCookie);return manager;}/*** 记住密码Cookie*/@Beanpublic SimpleCookie rememberMeCookie() {SimpleCookie simpleCookie = new SimpleCookie("rememberMe");simpleCookie.setHttpOnly(true);simpleCookie.setMaxAge(7 * 24 * 60 * 60);//7天return simpleCookie;}

将rememberMeManager 注入到securityManager

/*** 安全管理器securityManager*/@Beanpublic DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager,CacheManager cacheShiroManager,SessionManager sessionManager) {DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();securityManager.setRealm(this.shiroRealm());securityManager.setCacheManager(cacheShiroManager);
//        将rememberMeManager 注入到securityManagersecurityManager.setRememberMeManager(rememberMeManager);securityManager.setSessionManager(sessionManager);return securityManager;}

RememeberMe

如果要自己做RememeberMe,需要在登录之前这样创建Token:UsernamePasswordToken(用户名,密码,是否记住我),且调用UsernamePasswordToken 的:token.setRememberMe(true) 方法。

         Subject currentUser = ShiroKit.getSubject();UsernamePasswordToken token = new UsernamePasswordToken(username, password.toCharArray());if ("on".equals(remember)) {token.setRememberMe(true);} else {token.setRememberMe(false);}currentUser.login(token);

Apache Shiro(七)——Shiro的RememberMe功能相关推荐

  1. Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)

    问题 shiro中提供了rememberMe功能,它用起来是这样的 UsernamePasswordToken token = new UsernamePasswordToken(loginForm. ...

  2. Shiro学习之RememberMe功能实现

    目录 前言 更换MySQL数据库 一.更换依赖 二.更改配置 三.改换建表语句 Shiro的配置 控制层的改进 实际展示 咨询请找 前言 在网上看了一个开源的springboot项目,上面有非常全的s ...

  3. [shiro] - 加入rememberMe功能

    shiro不加入rememberMe没事,一加入就出错. RememberMeAuthenticationToken : public interface RememberMeAuthenticati ...

  4. Shiro实现单一登录,并保留使用RememberMe功能。

    Shiro提供的功能结构图: Shiro详细的架构: Shiro中的各类过滤器 Filter Name Class anon org.apache.shiro.web.filter.authc.Ano ...

  5. Shiro 实现 RememberMe 功能

    本文内容:Shiro 中RememberMe 功能的介绍以及实现. 1 介绍 Shiron 提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器下次再打开时还是能记住你 ...

  6. [Shiro教程] Shiro 教程基于SSM(SpringMVC + Spring + Mybatis)EHCache版本

    一.Shiro简介 Apache Shiro 是 Java  的一个安全框架.我们经常看到它被拿来和 Spring  的 Security  来对比.大部分人认为 Shiro  比 Security  ...

  7. [Shiro教程] Shiro 教程基于SSM(SpringMVC + Spring + Mybatis)

    一.Shiro简介 Apache Shiro 是 Java  的一个安全框架.我们经常看到它被拿来和 Spring  的 Security  来对比.大部分人认为 Shiro  比 Security  ...

  8. Day374.shiro授权Shiro+jsp整合Springboot -Shiro

    Shiro授权 一.授权 授权,即访问控制,控制谁能访问哪些资源.主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的. 二.关键对象 授权可简单理解为who对what( ...

  9. shiro框架---shiro配置介绍(一)

    接上一篇文章shiro框架-通过系统介绍shiro框架中的实现逻辑   项目已分享到GitHub上,如果需要的可以看下,springboot+shiro项目Git下载地址. shiro在springb ...

  10. 【Shiro】shiro的Session管理

    [Shiro]shiro的Session管理 1. Session管理介绍 2. JavaSE环境下 3. JavaEE环境下 4. Session监听 5. Session检测 1. Session ...

最新文章

  1. php中rsort,php数组函数排序之rsort()
  2. Hack Into Linux Packet Schedulers
  3. batocera_旧电脑变身影音游戏主机,来自法国大神的batocera系统
  4. 无线网络:家庭 WiFi 的安全隐患及实用的防范建议
  5. qt在加入Q_OBJECT宏之后出现编译错误
  6. 怎么用睡袋拉人_宝宝晚上翻身踢被子又着凉了,别再盖被子,给宝宝穿婴儿睡袋吧...
  7. (二)使用CycleGAN进行移动风格迁移
  8. java 对象查找_通过Java中的参数集查找最合适的对象
  9. 嘴上说着喜爱Java 9 ,身体却诚实地拥抱了Java 8
  10. Eclipse中关闭不需要的插件
  11. 蓝桥杯2018年第九届C/C++省赛A组第一题-分数
  12. 决策树系列(三)——ID3
  13. 数据时代,嵌入式工程师必须知道的八大加密算法
  14. python按照绝对值排序_尝试使用python中的绝对值,按最接近零的值对列表进行排序...
  15. 5G无线关键技术 — 大规模天线技术
  16. 【入门】求三个数的平均数
  17. SAP Down Payment的设置和使用
  18. 简单精干之 MyBatis-Plus
  19. 修改Arduino IDE背景和字体颜色
  20. 浅谈Zebra斑马打印机三种打印方式的利弊

热门文章

  1. 如何用3Dmax游戏角色建模?看完你就会了!
  2. Word论文自动化排版
  3. 苹果cms设置提供采集接口让他人采集
  4. Meta标签实现阻止移动设备(手机、Pad)的浏览器双击放大网页
  5. adaboost算法的matlab实现,Adaboost算法
  6. 微信小程序SDK使用实例
  7. 生成 .chm 格式帮助文档
  8. java 中 sleep 和 wait
  9. 百度出品,Nature重磅 -- 优化的mRNA设计算法可改善mRNA的稳定性和免疫原性
  10. 鸿蒙智联开发者平台项目的理解介绍