springSecurity-记住我(Remember me)

news2024/11/15 11:45:40

一.记住我概述

Remember me(记住我)记住我,当用户发起登录勾选了记住我,在一定的时间内再次登录就不用输入用户名和密码了,即使浏览器退出重新打开也是如此。

二.流程分析

在SpringSecurity中提供RememberMeAuthenticationFilter过滤器来实现记住我功能,其核心流程如下:

1.认证成功UsernamePasswordAuthenticationFilter会调用RememberMeServices创建Token
(见其父类AbstractAuthenticationProcessingFilter.successfulAuthentication),同时 RemeberMeService 会调用TokenRepository将Token写入数据库(persistent_logins),然后 RemeberMeService通 过Reponse.addCookie把Token写到浏览器的Cookies中

2.当浏览器再次发起请求会进入RemeberMeAuthenticationFilter,该Filter获取到请求中的token交给RemeberMeService

3.RemeberMeService调用TokenRepository去数据库中根据Token查询用户名

4.调用UserDetilasService.loadUserByUsername根据用户名获取用户认证信息

5.通过authenticationManager.authenticate,做一次认证,然后把用户信息放入上下文对象中

三,实现

1,开启记住我功能(http.rememberMe();)

protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers("/public/**").permitAll() // 允许访问公开路径
                .antMatchers("/public/index").access("hasRole('vip')") // 需要指定用户在可以使用
                .antMatchers("/admin/**").access("hasRole('admin')") // 需要指定用户在可以使用
                .anyRequest().authenticated() // 其他请求需要认证
                .and()
                .formLogin() // 使用表单登录
                .loginPage("/login") // 指定登录页面

                .permitAll() // 允许所有用户访问登录页面
                .and()
                .logout() // 配置注销
                .logoutUrl("/logout") // 注销路径
                .logoutSuccessUrl("/login?logout") // 注销成功后跳转的页面
                .and()
                .csrf().disable();//关闭csrf功能
                //记住我
                http.rememberMe();

    }

2,测试,关闭浏览器再次打开用户依旧存在

本质上是保存到cookie,通过浏览器审查元素的application中可以看到

3,如果使用自己的页面中的按钮,可以给按钮设置name,再在配置后面加上如下方法

http.rememberMe().rememberMeParameter("remember");

四,定制登录页


在配置中设置,用.loginProcessingUrl("/login")并将前端form表单的action设置为括号内相同即可,但如果前端用户名和密码前后端不一样,则需要进行设置,括号内的属性为前端页面的name属性

http.formLogin().loginPage("/toLogin").usernameParameter("username").passwordParameter("password").loginProcessingUrl("/login");


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1606184.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实时动作检测 | 基于Pytorch+YOLOv5+SlowFast实现的视频流实时动作检测算法_支持多目标的跟踪检测

项目应用场景 面向视频流场景的多目标实时动作检测,项目使用 Pytorch YOLOv5 SlowFast 算法实现。 项目效果 项目细节 > 具体参见项目 README.md (1) 创建 Python 开发环境 conda create -n {your_env_name} python3.7.11 conda activate {your_env_name} (2…

npm镜像源的查看和切换

前言 原域名https://registry.npm.taobao.org/ 原来的淘宝镜像已经不行了,当npm去taobao时,会出现一个证书过期的提示. 下面的是最新的地址: 切换到淘宝镜像(最新的地址) #最新地址 淘宝 NPM 镜像站喊你切换新域名啦! npm config set registry https://registry.npmmirror.com…

00_Linux

文章目录 LinuxLinux操作系统的组成Linux的文件系统Linux操作系统中的文件类型Linux操作系统的组织结构 Linux vs WindowsNAT vs 桥接模式 vs 仅主机Linux Shell命令Linux⽂件与⽬录管理相关指令目录文件普通文件文本编辑 用户管理添加用户删除用户用户组管理 文件权限管理权限…

视频教程下载:用ChatGPT快速提升股票投资能力

学完此视频后可以获得: 学习如何使用人工智能/Chatgpt进行基础/快速/高级财务与研究分析 学习如何使用人工智能/Chatgpt对任何公司进行定性投资研究 学习如何使用人工智能/Chatgpt对任何公司进行定量投资研究 学习如何使用人工智能/Chatgpt创建、预测和分析财务…

C语言(二维数组)

Hi~!这里是奋斗的小羊,很荣幸各位能阅读我的文章,诚请评论指点,关注收藏,欢迎欢迎~~ 💥个人主页:小羊在奋斗 💥所属专栏:C语言 本系列文章为个人学习笔记&#x…

Mac下brew安装php7.4

这里作者挂了梯子,所以很流畅! brew的下载,可参考另外一篇博文~Homebrew 安装与卸载 1、将第三方仓库加入brew brew tap shivammathur/php2、安装指定版本的PHP brew install php7.43、替换Mac自带PHP环境并刷新环境变量 -> …

【uniapp】uniapp返回上一页,并实现刷新界面数据

在uniapp中,经常会有返回上一页的情况,官方提供有 uni.navigateBack 这个api来实现效果,但是此方法返回到上一页之后页面并不会自动刷新(不会触发上一页的onLoad()方法)。 使用场景 从一个列表界面点击新增按钮&…

ASP.NET基于Web Mail收发系统设计与开发

摘 要 互联网络技术的不断发展,电子邮件服务已经成为人们基本的信息交互手段,也是网络服务中最早和最基本的服务之一。传统邮件系统大多是基于C/S结构,如Lotus notes、Microsoft Exchange Server等,这些邮件系统占用相对较多的服…

【氮化镓】GaN HEMT失效物理和可靠性

概述: 本文是一篇关于AlGaN/GaN基高电子迁移率晶体管(HEMTs)的失效物理和可靠性研究的综述文章,发表在2013年10月的《IEEE Transactions on Electron Devices》上。文章由Enrico Zanoni等人撰写,主要关注了影响栅极边缘和肖特基结的失效机制,并探讨了提高这些器件可靠性…

未来趋势:探索Facebook在数字化时代的发展方向

在当今日益数字化的时代,社交媒体已经成为人们日常生活中不可或缺的一部分。Facebook,作为全球最大的社交媒体平台,一直处于行业的前沿,不断地探索和引领社交媒体的发展趋势。本文将深入探讨Facebook在数字化时代的发展方向&#…

算法一:数字 - 两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 来源:力扣(LeetCode) 链接&#xf…

详解 C++ 实现K-means算法

一、K-means算法概述 K-means算法是一种非常经典的聚类算法,其主要目的是将数据点划分为K个集群,以使得每个数据点与其所属集群的中心点(质心)的平方距离之和最小。这种算法在数据挖掘、图像处理、模式识别等领域有着广泛的应用。 二、K-means算法的基本原理 K-means算法…

项目中的解耦小能手-观察者模式

目录 1.使用场景 2.什么是观察模式 3.观察者模式结构图 4.代码实现案例 4.1 subject代码实现 4.2 Observer类代码实现 5. 回顾总结 1.使用场景 当一个对象的改变需要同事改变其他对象的时候,如:订单中心-下单成功需要通知库存、物流和积分去做相应…

llama-factory SFT系列教程 (三),chatglm3-6B 大模型命名实体识别实战

文章列表: llama-factory SFT系列教程 (一),大模型 API 部署与使用llama-factory SFT系列教程 (二),大模型在自定义数据集 lora 训练与部署 llama-factory SFT系列教程 (三),chatglm3-6B 命名实体识别实战 简介 利用 llama-fa…

基于百度文心大模型全面重构,小度正式推出AI原生操作系统DuerOS X

4月16日,以“创造未来”为主题的2024百度Create AI开发者大会在深圳举办。百度集团副总裁、小度科技CEO李莹正式发布了小度新一代操作系统DuerOS X,该操作系统是小度基于百度文心大模型推出的全球首个AI原生操作系统。李莹表示:“作为⽂⼼⼤模…

车载终端丨车载平板丨车载平板电脑丨提升车队管理水平

随着电商、互联网和智能制造等行业的快速发展,物流需求不断增加,车载终端作为物流企业管理的重要工具,具有广泛的市场需求。车载平板是一种集成了计算机和显示屏的设备,可以用于车辆管理、车队调度、运输监控等方面,可…

AI:160-使用Python进行机器学习模型的调参与优化

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正…

C/C++中程序内存区域划分

总结C/C中程序内存区域划分 C/C程序内存分配的几个区域: 1. 栈区(stack):在执⾏函数时,函数内局部变量的存储单元都可以在栈上创建,函数执⾏结束时 这些存储单元⾃动被释放。栈内存分配运算内置于处理器的…

深入解析Apache Hadoop YARN:工作原理与核心组件

什么是YARN? YARN(Yet Another Resource Negotiator)是Apache Hadoop生态系统中的一个重要组件,用于资源管理和作业调度。它是Hadoop 2.x版本中的一个关键特性,取代了旧版本中的JobTracker和TaskTracker。YARN的设计目…

Android代码函数类快速查询方法

一、引言 android代码庞大且非常复杂,本文就记录一些查询函数类的方法,便于初级快速查询入手。 二、查询android函数类方法 以查询 MediaPlayer类为例。 2.1 通过Android Studio关键词声明定义 2.2 通过Android Studio的Navigate查找 打开Android S…