Shiro 实现记住我功能
登录一些网站的时候,在登录输入框的下侧一般都会有一个“记住我”的勾选框,选择之后,下次进入网站时就会自动进行登录操作,无需我们再次输入密码。
有关“记住我”的实现原理如下:
1、首先在登录页面选中“记住我”然后登录成功;如果是浏览器登录,一般会把“记住我”的Cookie写到客户端并保存下来。
2、关闭浏览器再重新打开,会发现浏览器还是记住你的。
3、访问一般的网页服务器端还是知道你是谁,且能正常访问。
Shiro提供了登录时的“认证”操作,同时也提供了“记住我”的操作实现,有何区别?
1)subject.isAuthenticated()
表示用户进行了身份验证登录的,即使用Subject.login进行了登录;
2)subject.isRemembered()
表示用户是通过“记住我”登录的,此时可能并不是真正的你(如其他人使用你的电脑,或者你的cookie被窃取)在访问的;
两者二选一,即subject.isAuthenticated()==true,则subject.isRemembered()==false;反之一样。
一、演示 记住我 功能
1、登录页面:
<form action="${pageContext.request.contextPath }/login" method="post" id="loginForm" >用户名:<input type="text" name="username"><br>密 码:<input type="password" name="pazzword" id="pazzword"><br><input type="checkbox" name="rememberme" value="1"> 记住我7天<br><button type="button" onclick="checkForm()">登录</button></form>
2、action 登录方法:token.setRememberMe(true);
@PostMapping("/login")public String login(User user, HttpSession session, Integer rememberme) {//使用 shiro 登录验证//1 认证的核心组件:获取 Subject 对象Subject subject = SecurityUtils.getSubject();//2 将登陆表单封装成 token 对象UsernamePasswordToken token = new UsernamePasswordToken(user.getUsername(), user.getPazzword());//开启记住我功能if(rememberme != null && rememberme == 1) {token.setRememberMe(true);}try {//3 让 shiro 框架进行登录验证:subject.login(token);} catch (Exception e) {e.printStackTrace();return "loginError";}return "redirect:/admin/index";}
3、在 spring.xml 里的配置 shiro 的核心组件bean中配置 cookie 失效时间
<!-- 配置 shiro 的核心组件:securityManager --><bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"><!-- 配置缓存 --><property name="cacheManager" ref="cacheManager"/> <property name="authenticator" ref="authenticator"></property> <!-- 配置域realm,用户名,密码,角色都保存在域里:实现从数据库中获取用户信息,需要我们自己创建一个类(实现Realm接口) --><property name="realms"><list><ref bean="shiroRealm"/><ref bean="weixinRealm"/><ref bean="qqRealm"/></list></property><!-- cookie 7天,单位:秒。也采用spring el表达式来计算 --><!-- <property name="rememberMeManager.cookie.maxAge" value="604800"></property> --><property name="rememberMeManager.cookie.maxAge" value="#{7 * 24 * 60 * 60}"/> </bean>
跟踪一下 rememberMeManager 属性:
4、运行项目登录访问即可:
注意:
1)要实现记住我功能,必须将管理的model对象实现可序列化(implements Serializable)。
2)在athc过滤配置之前,能够通过记住我访问的页面要配置user过滤器。
end ~
Shiro 实现记住我功能相关推荐
- java shiro 访问频率_java shiro配置记住密码功能 RememberMe
一般来讲,记住密码的基本处理,就是把用户的一些基本信息(密码)存入浏览器的Cookie,下次登录的时候优先验证Cookie,后端做处理:以此来实现记住密码的功能!使用shiro自带的RememberM ...
- shiro教程:记住我功能
虽然不太推荐使用记住我功能, 但是,还是讲一下这个功能,实际上大多数使用session来管理. 1.applicationContext-shiro.xml文件 <!-- 安全管理器 --> ...
- 9.Spring Security添加记住我功能
在网站的登录页面中,记住我选项是一个很常见的功能,勾选记住我后在一段时间内,用户无需进行登录操作就可以访问系统资源.在Spring Security中添加记住我功能很简单,大致过程是:当用户勾选了记住 ...
- AppCan用cookie实现记住密码功能 [APP]
今天想做个在应用上记住密码的功能.想了一下,先用COOKIE来测试.COOKIE保存在客户端. 关于COOKIE在手机上安不安全的问题,以后再讨论. 其实想过在手机上创建文件保存密码,但是,没有时间, ...
- Spring Security实现登录权限控制,记住我等功能
文章目录 1.Spring Security简介 2.登录权限控制 2.1.基本功能 2.2.登录和未登录导航栏显示 2.3.根据权限显示不同页面功能 3.定制登录页和记住我功能 3.1.定制登录页 ...
- Apache Shiro实现用户登录功能
apache shiro实现用户登录功能 配置shiro的Filter实现URL级别权限控制 配置web.xml <!-- shiro的过滤器 --> <filter>< ...
- Spring Security记住我功能之潜在的账号盗取风险
Spring Security 前言 Spring Security过滤器链 账号风险 如何避免呢? 前言 记住我功能方便是大家看得见的,但是安全性却令人担忧.因为Cookie毕竟是保存在客户端的,很 ...
- vue 登录页面记住密码功能
vue+iview/element 一般用来快速搭建后台管理系统,登录页的记住密码功能也是必不可少的. 记住密码快速登录功能(iview ui): 思路:首次登录,记住密码,将密码存储到cookie中 ...
- Spring Security 记住我功能原理以及实现
用户名登陆的案例 实现"记住我" 功能 在用户登陆一次以后,系统会记住用户一段时间,在这段时间,用户不用反复登陆就可以使用我们的系统. 记住我功能的基本原理 用户发送请求到User ...
- Spring Security 入门 Remember-Me 记住我功能
用户选择了"记住我"成功登录后,将会把username.随机生成的序列号.生成的token存入一个数据库表中,同时将它们的组合生成一个cookie发送给客户端浏览器. 当没有登录的 ...
最新文章
- 智源学者文再文获北京市杰出青年中关村奖
- JavaScript中 for、for in、for of、forEach等使用总结
- Python数据类型——整型、布尔型、列表、元祖、字典
- Python中*args和**kwargs
- 超音速亚原子Enterprise Java
- python大纲图_Python课程大纲
- 输入网址后到网页显示出来会发生什么?
- 可靠性测试设备技术含量_品牌手机厂商为何如此重视可靠性测试,海拓仪器一语道破玄机...
- Android Task 相关
- enum枚举类型的范例
- 支持“***Context”上下文的模型已在数据库创建后发生更改
- python pyqt5教程pdf_PyQt5中文手册
- 正则表达式:( ) 小括号、[ ] 中括号、{ } 大括号的区别
- 带宽与网速之间的关系
- MySQL 生成随机数字、字符串、日期、验证码以及 UUID
- 套料排版代码python_钣金制造管理系统Fabcost自动套料排版设置
- 淘宝、飞猪、闲鱼全都挂了!阿里程序员要被祭天了?
- 数据探索与数据预处理的实验报告
- 中国的女人到底有多好色?
- Java反射机制的基本认识
热门文章
- opencv中calcOpticalFlowPyrLK实现的光流法(Lucas-Kanade Method for Sparse Optical Flow)原理解析 (摘要翻译)
- python学习笔记(八)传递任意数量的实参
- 3位1体学习法(smart哥)
- 记录一个 Python 的 re.match() 的小坑
- websphere9静默式安装文档(简易版)
- linux内核态访问串口,linux内核中串口驱动注册过程(tty驱动)[转]
- CAD创建组却没有组合在一起?
- PMP-7. 项目经理及其影响力
- vsto 安装成功后打开office word不加载
- 朱晔的互联网架构实践心得S1E8:三十种架构设计模式(下)