一、原理分析

第一次登陆时,如果用户勾选了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实现记住我下次自动登录功能过程详解相关推荐

  1. java list 遍历查找_Java用list储存,遍历,查询指定信息过程详解

    需求说明 实现思路 见代码注释 代码内容 使用list储存,遍历,查询,删除 import java.util.ArrayList; import java.util.List; /** * @aut ...

  2. php中实现记住密码下次自动登录的例子

    做网站的时候经常会碰到要实现记住密码,下次自动登录,一周内免登陆,一个月内免登陆这种需求.这种功能一般都是通过cookie来实现的.本篇文章将简单说一下如何使用php实现该需求的.当然实现该需求的方法 ...

  3. js-jquery-禁用默认事件 未登录状态下不允许操作 显示“请先登录”@LesleyZhangLu

    js-jquery-禁用默认事件 未登录状态下不允许操作 显示"请先登录"@LesleyZhangLu js-jquery-禁用默认事件 在项目中引入layer.js和jquery ...

  4. vue 记住密码下次自动登录

    <span><input type="checkBox" name="adviceCheck" id="adviceCheck&qu ...

  5. Cookie-网站登录-下次自动登录

    做网站前端用户登录时需要有个下次自动登录的功能.看了看各大网站都有这种功能. 问题描述:用户登录网站时,一般有个checkbox让用户选择是否可以下次自动登录.选择后,即使用户关闭浏览器,下次再访问这 ...

  6. java判断或_Java判断用户名和密码是否符合要求过程详解

    这篇文章主要介绍了Java判断用户名和密码过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 假设在某仓库管理系统的登录界面中需要输入用户名和密 ...

  7. Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解

    前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程 ...

  8. Java类的加载过程详解 面试高频!!!值得收藏!!!

    受多种情况的影响,又开始看JVM 方面的知识. 1.Java 实在过于内卷,没法不往深了学. 2.面试题问的多,被迫学习. 3.纯粹的好奇. 很喜欢一句话: 八小时内谋生活,八小时外谋发展. 望别日与 ...

  9. Java web 开发的概念、环境配置、创建项目过程详解(Eclipse)

    Java Web 开发 Java Web 开发概念 搭建过程 详解 在eclipse创建Dynamic Web Project 创建时选择Tomcat的版本 创建项目成功 eclipse环境下如何配置 ...

最新文章

  1. pytorch学习笔记(十二):详解 Module 类
  2. HTML基础第三讲---字体
  3. 【Tools】GitBook入门教程
  4. HTML5编程实战之二:用动画的形式切换图片
  5. 在SAP WebIDE Database Explorer里操作hdi实例
  6. ocp linux 基础要点
  7. 香橼做空跟谁学发第三枪 跟谁学股价盘后下跌1.37%
  8. tensorflow contrib模块_OpenCV DNN 模块-风格迁移
  9. jquery php 登录验证手机号码,jQuery电话号码验证实例
  10. SurfaceFlinger中queueBuffer与dequeueBuffer作用(十二)
  11. [原]linux 修改 hostname 立即生效
  12. Rust:String::from()、 into()、to_string()哪个效率高?
  13. 卡方检验2-python代码实现
  14. (Scrapy框架)爬虫2021年CSDN全站综合热榜标题热词 | 爬虫案例
  15. 以文会友,以书传情—山西省侨商联合会召开书画艺术委员会成立大会
  16. 【Volume X has invalid topology for mapped brick meshing】
  17. iOS UILabel 单词自动换行
  18. 关于单精度浮点型精确位数7~8以及双精度浮点型精确位数15~16的解释
  19. Celery启动定时任务遇到报错
  20. 云边端一体化技术白皮书

热门文章

  1. 华为再发行30亿元超短期融资券
  2. 北京冬奥会闭幕 冰墩墩概念股怎么样了?
  3. 特斯拉FED在美售价上调至1.2万美元 国内售价6.4万元
  4. “几乎看不见”的铰链!可折叠iPhone要来了?
  5. 为什么说人类的屁股是个四次元空间?
  6. 灯塔上线网络电影日分账票房数据,网络电影进入票房日更时代
  7. 企业微信3.0版本发布:客户朋友圈功能正式上线
  8. 华强北万事俱备,只待 iPhone 11到货
  9. 小米全新5G旗舰手机即将登场 售价必将再创新高
  10. 腾讯终于有动作了:国行版Switch快来了...