java如何记住登录状态_Spring security实现记住我下次自动登录功能过程详解
一、原理分析
第一次登陆时,如果用户勾选了readme选项,登陆成功后springsecurity会生成一个cookie返回给浏览器端,浏览器下次访问时如果携带了这个cookie,springsecurity就会放行这次访问。
二、实现方式
2.1 简单实现方式
(1) 在springsecurity的配置文件中,http节点下增加一个remember-me配置
username-parameter="username" password-parameter="password"
authentication-failure-forward-url="/failed.html"
default-target-url="/index.html"
/>
其中remember-me-parameter="remembermeParamater"指定前台传递的是否rememberme的参数名,前台要传递的参数值是true或false
(2)前台登录页面上增加一个checkbox
用户名:
密 码:
记住我:
checkbox的name属性要和上边配置文件中的remember-me-parameter="remembermeParamater"保持一致。
(3)测试
启动工程,进行登录,登录成功后观察cookie,会发现服务器端返回了一个名为remember-me的cookie
现在关闭浏览器,再次打开并访问,只要不清除cookie就可以直接访问资源,不需要重新登录。
这种方式有个弊端,浏览器端要携带的这个cookie值服务端是存放在内存中的,并没有进行持久化,所以如果服务重启后服务器端存储的这个值就会丢失,浏览器端的rememberme就会失效。为了解决这个问题就需要将服务器端生成的这个cookie值持久化到数据库中。
2.2 数据库实现方式
(1)创建一张表用来持久化rememberme的记录
-- 创建记录rememberme记录的表
CREATE TABLE persistent_logins
(
username VARCHAR(64),
series VARCHAR(64),
token VARCHAR(64),
last_used DATE
);
(2)将spring-security 配置文件中的rememberme标签的内容改为如下内容
token-validity-seconds="86400"/>
data-source-ref="dataSource"用来指定数据源,spring-security通过数据源来操作数据库中的persistent_logins表
token-validity-seconds表示rememberme的有效时间,以秒为单位,这里的86400=24*3600表示一天
(3)测试
启动工程,进行登录,登录成功后会在persistent_logins表中生成一条记录,
关闭浏览器再次访问时会根据浏览器中携带的cookie值来查找数据库中的这条记录,如果查询到了就认证通过
三、区分是密码登录还是rememberme登录
在用户进行一些敏感操作时,需要区分是否是rememberme登录,如果是需要让用户跳转到登录页面。
在congtroller层提供一个方法来进行判断
@GetMapping("/isRemembermeUser")
public boolean isRemembermeUser(){
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if(authentication==null){
return false;
}
//判断当前用户是否是通过rememberme登录,是返回true,否返回false
return RememberMeAuthenticationToken.class.isAssignableFrom(authentication.getClass());
}
先使用密码登录,访问http://localhost/user/isRemembermeUser.do,后台接口返回false,再关闭浏览器再次访问这个地址,后台接口返回true,表示这次是使用rememberme进行的认证。
测试工程代码的地址:工程示例
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
java如何记住登录状态_Spring security实现记住我下次自动登录功能过程详解相关推荐
- java list 遍历查找_Java用list储存,遍历,查询指定信息过程详解
需求说明 实现思路 见代码注释 代码内容 使用list储存,遍历,查询,删除 import java.util.ArrayList; import java.util.List; /** * @aut ...
- php中实现记住密码下次自动登录的例子
做网站的时候经常会碰到要实现记住密码,下次自动登录,一周内免登陆,一个月内免登陆这种需求.这种功能一般都是通过cookie来实现的.本篇文章将简单说一下如何使用php实现该需求的.当然实现该需求的方法 ...
- js-jquery-禁用默认事件 未登录状态下不允许操作 显示“请先登录”@LesleyZhangLu
js-jquery-禁用默认事件 未登录状态下不允许操作 显示"请先登录"@LesleyZhangLu js-jquery-禁用默认事件 在项目中引入layer.js和jquery ...
- vue 记住密码下次自动登录
<span><input type="checkBox" name="adviceCheck" id="adviceCheck&qu ...
- Cookie-网站登录-下次自动登录
做网站前端用户登录时需要有个下次自动登录的功能.看了看各大网站都有这种功能. 问题描述:用户登录网站时,一般有个checkbox让用户选择是否可以下次自动登录.选择后,即使用户关闭浏览器,下次再访问这 ...
- java判断或_Java判断用户名和密码是否符合要求过程详解
这篇文章主要介绍了Java判断用户名和密码过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 假设在某仓库管理系统的登录界面中需要输入用户名和密 ...
- Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解
前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程 ...
- Java类的加载过程详解 面试高频!!!值得收藏!!!
受多种情况的影响,又开始看JVM 方面的知识. 1.Java 实在过于内卷,没法不往深了学. 2.面试题问的多,被迫学习. 3.纯粹的好奇. 很喜欢一句话: 八小时内谋生活,八小时外谋发展. 望别日与 ...
- Java web 开发的概念、环境配置、创建项目过程详解(Eclipse)
Java Web 开发 Java Web 开发概念 搭建过程 详解 在eclipse创建Dynamic Web Project 创建时选择Tomcat的版本 创建项目成功 eclipse环境下如何配置 ...
最新文章
- pytorch学习笔记(十二):详解 Module 类
- HTML基础第三讲---字体
- 【Tools】GitBook入门教程
- HTML5编程实战之二:用动画的形式切换图片
- 在SAP WebIDE Database Explorer里操作hdi实例
- ocp linux 基础要点
- 香橼做空跟谁学发第三枪 跟谁学股价盘后下跌1.37%
- tensorflow contrib模块_OpenCV DNN 模块-风格迁移
- jquery php 登录验证手机号码,jQuery电话号码验证实例
- SurfaceFlinger中queueBuffer与dequeueBuffer作用(十二)
- [原]linux 修改 hostname 立即生效
- Rust:String::from()、 into()、to_string()哪个效率高?
- 卡方检验2-python代码实现
- (Scrapy框架)爬虫2021年CSDN全站综合热榜标题热词 | 爬虫案例
- 以文会友,以书传情—山西省侨商联合会召开书画艺术委员会成立大会
- 【Volume X has invalid topology for mapped brick meshing】
- iOS UILabel 单词自动换行
- 关于单精度浮点型精确位数7~8以及双精度浮点型精确位数15~16的解释
- Celery启动定时任务遇到报错
- 云边端一体化技术白皮书