Apache Shiro(七)——Shiro的RememberMe功能
一、概述
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功能相关推荐
- Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)
问题 shiro中提供了rememberMe功能,它用起来是这样的 UsernamePasswordToken token = new UsernamePasswordToken(loginForm. ...
- Shiro学习之RememberMe功能实现
目录 前言 更换MySQL数据库 一.更换依赖 二.更改配置 三.改换建表语句 Shiro的配置 控制层的改进 实际展示 咨询请找 前言 在网上看了一个开源的springboot项目,上面有非常全的s ...
- [shiro] - 加入rememberMe功能
shiro不加入rememberMe没事,一加入就出错. RememberMeAuthenticationToken : public interface RememberMeAuthenticati ...
- Shiro实现单一登录,并保留使用RememberMe功能。
Shiro提供的功能结构图: Shiro详细的架构: Shiro中的各类过滤器 Filter Name Class anon org.apache.shiro.web.filter.authc.Ano ...
- Shiro 实现 RememberMe 功能
本文内容:Shiro 中RememberMe 功能的介绍以及实现. 1 介绍 Shiron 提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器下次再打开时还是能记住你 ...
- [Shiro教程] Shiro 教程基于SSM(SpringMVC + Spring + Mybatis)EHCache版本
一.Shiro简介 Apache Shiro 是 Java 的一个安全框架.我们经常看到它被拿来和 Spring 的 Security 来对比.大部分人认为 Shiro 比 Security ...
- [Shiro教程] Shiro 教程基于SSM(SpringMVC + Spring + Mybatis)
一.Shiro简介 Apache Shiro 是 Java 的一个安全框架.我们经常看到它被拿来和 Spring 的 Security 来对比.大部分人认为 Shiro 比 Security ...
- Day374.shiro授权Shiro+jsp整合Springboot -Shiro
Shiro授权 一.授权 授权,即访问控制,控制谁能访问哪些资源.主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的. 二.关键对象 授权可简单理解为who对what( ...
- shiro框架---shiro配置介绍(一)
接上一篇文章shiro框架-通过系统介绍shiro框架中的实现逻辑 项目已分享到GitHub上,如果需要的可以看下,springboot+shiro项目Git下载地址. shiro在springb ...
- 【Shiro】shiro的Session管理
[Shiro]shiro的Session管理 1. Session管理介绍 2. JavaSE环境下 3. JavaEE环境下 4. Session监听 5. Session检测 1. Session ...
最新文章
- php中rsort,php数组函数排序之rsort()
- Hack Into Linux Packet Schedulers
- batocera_旧电脑变身影音游戏主机,来自法国大神的batocera系统
- 无线网络:家庭 WiFi 的安全隐患及实用的防范建议
- qt在加入Q_OBJECT宏之后出现编译错误
- 怎么用睡袋拉人_宝宝晚上翻身踢被子又着凉了,别再盖被子,给宝宝穿婴儿睡袋吧...
- (二)使用CycleGAN进行移动风格迁移
- java 对象查找_通过Java中的参数集查找最合适的对象
- 嘴上说着喜爱Java 9 ,身体却诚实地拥抱了Java 8
- Eclipse中关闭不需要的插件
- 蓝桥杯2018年第九届C/C++省赛A组第一题-分数
- 决策树系列(三)——ID3
- 数据时代,嵌入式工程师必须知道的八大加密算法
- python按照绝对值排序_尝试使用python中的绝对值,按最接近零的值对列表进行排序...
- 5G无线关键技术 — 大规模天线技术
- 【入门】求三个数的平均数
- SAP Down Payment的设置和使用
- 简单精干之 MyBatis-Plus
- 修改Arduino IDE背景和字体颜色
- 浅谈Zebra斑马打印机三种打印方式的利弊