登录一些网站的时候,在登录输入框的下侧一般都会有一个“记住我”的勾选框,选择之后,下次进入网站时就会自动进行登录操作,无需我们再次输入密码。

有关“记住我”的实现原理如下:

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 实现记住我功能相关推荐

  1. java shiro 访问频率_java shiro配置记住密码功能 RememberMe

    一般来讲,记住密码的基本处理,就是把用户的一些基本信息(密码)存入浏览器的Cookie,下次登录的时候优先验证Cookie,后端做处理:以此来实现记住密码的功能!使用shiro自带的RememberM ...

  2. shiro教程:记住我功能

    虽然不太推荐使用记住我功能, 但是,还是讲一下这个功能,实际上大多数使用session来管理. 1.applicationContext-shiro.xml文件 <!-- 安全管理器 --> ...

  3. 9.Spring Security添加记住我功能

    在网站的登录页面中,记住我选项是一个很常见的功能,勾选记住我后在一段时间内,用户无需进行登录操作就可以访问系统资源.在Spring Security中添加记住我功能很简单,大致过程是:当用户勾选了记住 ...

  4. AppCan用cookie实现记住密码功能 [APP]

    今天想做个在应用上记住密码的功能.想了一下,先用COOKIE来测试.COOKIE保存在客户端. 关于COOKIE在手机上安不安全的问题,以后再讨论. 其实想过在手机上创建文件保存密码,但是,没有时间, ...

  5. Spring Security实现登录权限控制,记住我等功能

    文章目录 1.Spring Security简介 2.登录权限控制 2.1.基本功能 2.2.登录和未登录导航栏显示 2.3.根据权限显示不同页面功能 3.定制登录页和记住我功能 3.1.定制登录页 ...

  6. Apache Shiro实现用户登录功能

    apache shiro实现用户登录功能 配置shiro的Filter实现URL级别权限控制 配置web.xml <!-- shiro的过滤器 --> <filter>< ...

  7. Spring Security记住我功能之潜在的账号盗取风险

    Spring Security 前言 Spring Security过滤器链 账号风险 如何避免呢? 前言 记住我功能方便是大家看得见的,但是安全性却令人担忧.因为Cookie毕竟是保存在客户端的,很 ...

  8. vue 登录页面记住密码功能

    vue+iview/element 一般用来快速搭建后台管理系统,登录页的记住密码功能也是必不可少的. 记住密码快速登录功能(iview ui): 思路:首次登录,记住密码,将密码存储到cookie中 ...

  9. Spring Security 记住我功能原理以及实现

    用户名登陆的案例 实现"记住我" 功能 在用户登陆一次以后,系统会记住用户一段时间,在这段时间,用户不用反复登陆就可以使用我们的系统. 记住我功能的基本原理 用户发送请求到User ...

  10. Spring Security 入门 Remember-Me 记住我功能

    用户选择了"记住我"成功登录后,将会把username.随机生成的序列号.生成的token存入一个数据库表中,同时将它们的组合生成一个cookie发送给客户端浏览器. 当没有登录的 ...

最新文章

  1. 智源学者文再文获北京市杰出青年中关村奖
  2. JavaScript中 for、for in、for of、forEach等使用总结
  3. Python数据类型——整型、布尔型、列表、元祖、字典
  4. Python中*args和**kwargs
  5. 超音速亚原子Enterprise Java
  6. python大纲图_Python课程大纲
  7. 输入网址后到网页显示出来会发生什么?
  8. 可靠性测试设备技术含量_品牌手机厂商为何如此重视可靠性测试,海拓仪器一语道破玄机...
  9. Android Task 相关
  10. enum枚举类型的范例
  11. 支持“***Context”上下文的模型已在数据库创建后发生更改
  12. python pyqt5教程pdf_PyQt5中文手册
  13. 正则表达式:( ) 小括号、[ ] 中括号、{ } 大括号的区别
  14. 带宽与网速之间的关系
  15. MySQL 生成随机数字、字符串、日期、验证码以及 UUID
  16. 套料排版代码python_钣金制造管理系统Fabcost自动套料排版设置
  17. 淘宝、飞猪、闲鱼全都挂了!阿里程序员要被祭天了?
  18. 数据探索与数据预处理的实验报告
  19. 中国的女人到底有多好色?
  20. Java反射机制的基本认识

热门文章

  1. opencv中calcOpticalFlowPyrLK实现的光流法(Lucas-Kanade Method for Sparse Optical Flow)原理解析 (摘要翻译)
  2. python学习笔记(八)传递任意数量的实参
  3. 3位1体学习法(smart哥)
  4. 记录一个 Python 的 re.match() 的小坑
  5. websphere9静默式安装文档(简易版)
  6. linux内核态访问串口,linux内核中串口驱动注册过程(tty驱动)[转]
  7. CAD创建组却没有组合在一起?
  8. PMP-7. 项目经理及其影响力
  9. vsto 安装成功后打开office word不加载
  10. 朱晔的互联网架构实践心得S1E8:三十种架构设计模式(下)