一、介绍

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

基本流程

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

二、实现

2.1、沿用博客“登录认证前端”的项目

2.2、在ShiroConfig中配置cookie属性

    //cookie属性设置public SimpleCookie rememberMeCookie(){SimpleCookie cookie = new SimpleCookie("rememberMe");//设置跨域//cookie.setDomain(domain);cookie.setPath("/");cookie.setHttpOnly(true);cookie.setMaxAge(30*24*60*60);return cookie;}

2.3、在ShiroConfig中创建Shiro的cookie管理对象

    //创建Shiro的cookie管理对象public CookieRememberMeManager rememberMeManager(){CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();cookieRememberMeManager.setCookie(rememberMeCookie());cookieRememberMeManager.setCipherKey("1234567890987654".getBytes());return cookieRememberMeManager;}

2.4、在ShiroConfig内置过滤器中添加存在用户的过滤器

   @Beanpublic DefaultShiroFilterChainDefinition shiroFilterChainDefinition(){DefaultShiroFilterChainDefinition definition = new DefaultShiroFilterChainDefinition();//设置不认证可以访问的资源definition.addPathDefinition("/myController/userLogin","anon");definition.addPathDefinition("/myController/login","anon");//设置需要进行登录认证的拦截范围definition.addPathDefinition("/**","authc");//添加存在用户的过滤器(rememberMe)definition.addPathDefinition("/**","user");return definition;}

2.5、设置rememberMe

    //配置SecurityManager@Beanpublic DefaultWebSecurityManager defaultWebSecurityManager(){//1.创建defaultWebSecurityManager对象DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager();//2.创建加密对象,设置相关属性HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();//2.1.采用md5加密matcher.setHashAlgorithmName("md5");//2.2.迭代加密的次数matcher.setHashIterations(3);//3.将加密对象存储到myRealm中myRealm.setCredentialsMatcher(matcher);//4.将myRealm存入defaultWebSecurityManager对象defaultWebSecurityManager.setRealm(myRealm);//4.5、设置rememberMedefaultWebSecurityManager.setRememberMeManager(rememberMeManager());//5.返回return defaultWebSecurityManager;}

2.6、在login.html添加rememberMe

2.7、修改MyController类,如下

package com.massimo.shiro.controller;import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpSession;@Controller
@RequestMapping("myController")
public class MyController {@GetMapping("userLogin")public String userLogin(String name, String pwd, HttpSession session, @RequestParam(defaultValue = "false") boolean rememberMe){//1.获取subject对象Subject subject = SecurityUtils.getSubject();//2.封装请求数据到tokenAuthenticationToken token = new UsernamePasswordToken(name,pwd,rememberMe);//3.调用login方法进行登录验证try {subject.login(token);session.setAttribute("user",token.getPrincipal().toString());return "main";} catch (AuthenticationException e) {e.printStackTrace();System.out.println("登陆失败");return "登录失败";}}//登录认证验证rememberMe@GetMapping("userLoginRm")public String userLogin(HttpSession session){session.setAttribute("user","rememberMe");return "main";}//    //跳转登录页面@GetMapping("login")public String login(){return "login";}
}

Shiro实现rememberMe功能相关推荐

  1. Shiro 实现 RememberMe 功能

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

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

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

  3. [shiro] - 加入rememberMe功能

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

  4. Apache Shiro(七)——Shiro的RememberMe功能

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

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

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

  6. Shiro学习之RememberMe功能实现

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

  7. shiro的remember功能

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

  8. SpringBoot整合Shiro实现RememberMe

    接上Springboot Shiro实现用户验 shiro提供了RememberMe功能,用户登录状态不会因为浏览器的关闭而失效,知道cookie过期 更改ShiroConfig 加入cookie管理 ...

  9. 记住我remember-me功能的几种实现方式

    本文讨论几种记住我功能的实现方式. 原理:用户登录后,服务端为用户生成一个Token,并放入客户端Cookie中.下次用户登录,服务端验证Cookie中的Token并自动登录. 简单的Token生成方 ...

最新文章

  1. mysql设置text字段为not null,并且没有默认值,插入报错:doesn't have a default value
  2. OpenCV之ml 模块. 机器学习:支持向量机(SVM)介绍 支持向量机对线性不可分数据的处理
  3. LeetCode 25K 个一组翻转链表26删除排序数组中的重复项
  4. 晶体封装越小esr越大_SuperFin晶体管技术加持!英特尔新一代10nm可媲美台积电5nm?...
  5. python软件设置代码字体的大小_PyCharm中代码字体大小调整方法
  6. insert和update 锁等待_黑龙F5智感双全智能锁全球首发,掀起惊艳风潮
  7. Lego-美团接口自动化测试实践
  8. 算法:还有比二分查找更快的算法,判断是否是子字符串Is Subsequence
  9. max30102c语言,max30102问题
  10. python for line in sys.stdin读文件,按行处理
  11. matlab用DFT分析三频频谱,设计一DFT在信号频谱分析中的应用
  12. Adyen海外支付 - Adyen回调
  13. 在windows中桌面显示itunes音乐滚动歌词
  14. 邮箱接爱服务器端口填什么,你了解多少邮件端口及常用邮箱服务器?
  15. 3D游戏建模师薪水大概是多少?从人生经历来看
  16. 2、视觉基础知识问答
  17. 乐事薯片:价格涨了,质量降了,年轻人的快乐没有了
  18. python3类型转换
  19. thinksns java_社交APP系统ThinkSNS+技术概要
  20. 前端--HTML入门

热门文章

  1. 深入计算机组成原理(十五)浮点数和定点数(上):怎么用有限的bit标识尽可能多的信息?
  2. 时间窗口(Time Windows)的原理和使用
  3. 关于C语言编译器提示[Error] Id returned 1 exit status的原因
  4. ANSYS Fluent UDF Manual 2020R2
  5. 人生不是故事,人生是世故,摸爬滚打才不会辜负功名尘土
  6. 湖北省制造业高质量发展专项资金政策!2022年各大类申报条件以及奖励补贴标准汇总
  7. 一、RapidIO背景介绍
  8. 计算机是否将取代纸质书籍,平板电脑代替纸质教科书 利弊各几分?
  9. 从README开始吧
  10. Java如何定义三维数组