当前位置: 首页 > 编程日记 > 正文

spring security remember me实现自动登录

1 默认策略

在我们自定义的login中增加一个选择框

<input type="submit" value="Login" />     <br/> <br/>     <input type="checkbox" value=true name="_spring_security_remember_me" />记住密码
        <!-- 记住我功能 --><security:remember-me key="elim" />

web.xml中增加成上述就可以实现了。

默认有效时间是两周,启用rememberMe之后的两周内,用户都可以直接跳过系统,直接进入系统。

实际上,Spring Security中的rememberMe是依赖cookie实现的,当用户在登录时选择使用rememberMe,系统就会在登录成功后将为用户生成一个唯一标识,并将这个标识保存进cookie中,我们可以通过浏览器查看用户电脑中的cookie。

rememberMe cookie

图 16.2. rememberMe cookie

从上图中,我们可以看到Spring Security生成的cookie名称是SPRING_SECURITY_REMEMBER_ME_COOKIE,它的内容是一串加密的字符串,当用户再次访问系统时,Spring Security将从这个cookie读取用户信息,并加以验证。如果可以证实cookie有效,就会自动将用户登录到系统中,并为用户授予对应的权限。

2. 持久化策略

rememberMe的默认策略会将username和过期时间保存到客户主机上的cookie中,虽然这些信息都已经进行过加密处理,不过我们还可以使用安全级别更高的持久化策略。在持久化策略中,客户主机cookie中保存的不再用username,而是由系统自动生成的序列号,在验证时系统会将客户cookie中保存的序列号与数据库中保存的序列号进行比对,以确认客户请求的有效性,之后在比对成功后才会从数据库中取出对应的客户信息,继续进行认证和授权等工作。这样即使客户本地的cookie遭到破解,攻击者也只能获得一个序列号,而不是用户的登录账号。

如果希望使用持久化策略,我们需要先在数据库中创建rememberMe所需的表。

create table persistent_logins (username varchar(64) not null,series varchar(64) primary key,token varchar(64) not null,last_used timestamp not null
);

然后要为配置文件中添加与数据库的链接。

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="org.hsqldb.jdbcDriver"/><property name="url" value="jdbc:hsqldb:res:/hsqldb/test"/><property name="username" value="sa"/><property name="password" value=""/>
</bean>

最后修改http中的配置,为remember-me添加data-source-ref即可,Spring Security会在初始化时判断是否存在data-source-ref属性,如果存在就会使用持久化策略,否则会使用上述的默认策略。

<http auto-config='true'><intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" /><intercept-url pattern="/**" access="ROLE_USER" /><remember-me data-source-ref="dataSource"/>
</http>

默认策略和持久化策略是不能混用的,如果你首先在应用中使用过默认策略的rememberMe,未等系统过期便换成了持久化策略,之前保留的cookie也无法通过系统验证,实际上系统会将cookie当做无效标识进行清除。同样的,持久化策略中生成的cookie也无法用在默认策略下。

转载于:https://www.cnblogs.com/wenjieyatou/p/6118256.html

相关文章:

野指针与内存泄漏那些事

野指针&#xff1a;不是NULL指针&#xff0c;是指向垃圾内存的指针 野指针成因&#xff1a; 1.指针变量没有被初始化&#xff1a;指针变量在创建时同时应当被初始化&#xff0c;要么将指针设置为NULL&#xff0c;要么让它指向合法的内存。 2.指针p被free或者delete,没有被设置为…

参数等效模型可以用于_等效媒质理论(介电参数反演)

听说过超材料的读者大概率会了解一个知识点&#xff0c;复杂的媒质块可以等效为一块平板&#xff0c;当然这是有条件的。比如模型小于十分之一波长之类的&#xff0c;尤其对模型厚度要求严格些。大家在查找等效媒质理论文献的时候&#xff0c;可能会被繁杂的理论解释弄得爆炸&a…

js日期格式化Date

使用Date类进行日期格式化。 1 输入“yyyy-MM-dd hh:mm:ss”格式的String字符串&#xff0c;返回字符串 做一个简单判定&#xff0c;在当日显示为几点几分&#xff0c;同年为月日&#xff0c;不同年显示年月 1 function dateFormat(str){2 //str格式为yyyy-mm-dd h…

(十九)异常处理

什么是异常处理 异常就是程序运行时发生错误的信号&#xff08;在程序出现错误时&#xff0c;则会产生一个异常&#xff0c;若程序没有处理它&#xff0c;则会抛出该异常&#xff0c;程序的运行也随之终止&#xff09;&#xff0c;在python中,错误触发的异常如下 语法错误&…

jquery 获取一组元素的选中项 - 函数、jquery获取复选框值、jquery获取单选按钮值...

做表单提交时&#xff0c;如果现在还在用form提交&#xff0c;用户体验很差&#xff0c;所以一般使用ajax提交。 其中需要获取每个表单输入元素的值&#xff0c;获取的时候像文本框这些还好说&#xff0c;Jquery提供了 .val() 方法&#xff0c;获取很方便&#xff0c;但是获取复…

geany怎么创建文件夹_教程详情|Geany怎么使用,Geany安装使用教程_234游戏网

Geany是利用GTK 2工具包开发的一个快速、轻巧的集成开发环境&#xff0c;具有良好的可移植性和通用性、安全性&#xff0c;广泛应用于各个行业。Geany具有语法高亮、代码折叠、代码自动完成等功能&#xff0c;非常适合开发人员使用。下面是关于Geany安装使用教程&#xff0c;希…

Django模板系统和admin模块

只需要记两种特殊符号&#xff1a;{{ }}和 {% %}变量相关的用 {{}}&#xff0c; 逻辑相关的用 {%%}。 Filters 语法&#xff1a; {{ value|filter_name:参数 }}default{{ value|default: "nothing"}} 如果value值没传的话就显示nothinglength{{ value|length }}|左右…

finalshell文件列表不显示_Jira面板配置_待办事项不显示问题列表

最近&#xff0c;使用jira进行项目管理&#xff0c;出现一些问题&#xff0c;对于其中一些配置&#xff0c;做下记录&#xff0c;后续方便查看&#xff0c;也给需要的人一个参考&#xff0c;传送门&#xff1a;jira使用文档_Java_pang787559613的博客-CSDN博客​blog.csdn.netj…

背单词:3年,34150分钟!

转载于:https://www.cnblogs.com/sx00xs/p/6128618.html

如何学习区块链技术

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 有效地学习区块链技术&#xff0c;您需要深入了解区块链协议和一些编程语言。记住区块链是一种可以用各种编程语言实现的协议。看下面的例子&#…

.net里鼠标选中的text数据怎么获取_Python数据科学实践 | 爬虫1

点击上方蓝色字体&#xff0c;关注我们大家好&#xff0c;基于Python的数据科学实践课程又到来了&#xff0c;大家尽情学习吧。本期内容主要由智亿同学与政委联合推出。前面几章大家学习了如何利用Python处理与清洗数据&#xff0c;如何探索性数据分析&#xff0c;以及如何利用…

redis实现对账(集合比较)功能

现状&#xff1a;每日在进行系统之间的订单对账时&#xff0c;往往是这样的操作流程&#xff1b; 1.从外部系统拉取数据存入本地数据库&#xff1b; 2.查询本地订单数据集合localSet&#xff1b; 3.查询外部系统订单数据集合outerSet; 4.以本地localSet为基准&#xff0c;对照o…

Javascript刷题 》 查找数组元素位置

找出元素 item 在给定数组 arr 中的位置 输出描述: function indexOf(arr, item) {..... } 如果数组中存在 item&#xff0c;则返回元素在数组中的位置&#xff0c;否则返回 -1 输入例子: indexOf([ 1, 2, 3, 4 ], 3) 输出例子: 2 实现方法 1、先将arr转换成字符串&#xff0c;…

Go 语言函数

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 函数是基本的代码块&#xff0c;用于执行一个任务。 Go 语言最少有个 main() 函数。 你可以通过函数来划分不同功能&#xff0c;逻辑上每个函数执…

终端主题_再见 XShell 和 ITerm 2,是时候拥抱全平台高颜值终端工具 Hyper 了!

点击上方“涛哥聊Python”&#xff0c;选择“星标”公众号重磅干货&#xff0c;第一时间送达转自&#xff1a;运维之美不论是 macOS 还是 Windows 下&#xff0c;我们都不推荐使用系统自带终端。无论是可拓展性还是可编程性都被「系统自带」这样的特点限制。特别是 Windows 下的…

每天一个linux命令(8):cp 命令

cp命令用来复制文件或者目录&#xff0c;是Linux系统中最常用的命令之一。一般情况下&#xff0c;shell会设置一个别名&#xff0c;在命令行下复制文件时&#xff0c;如果目标文件已经存在&#xff0c;就会询问是否覆盖&#xff0c;不管你是否使用-i参数。但是如果是在shell脚本…

samba srver on centos-7

切换到root用户安装samba&#xff0c;将windows登录用户admin映射到linux用户centos 安装samba并准备工作目录 yum install -y samba samba-client mkdir -p /var/samba/code chown -R centos:centos /var/samba/codetouch /etc/samba/smbusersecho "centos admin "…

以太坊数据结构MPT

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 MPT(Merkle Patricia Tries)是以太坊存储数据的核心数据结构&#xff0c;它是由Merkle Tree和Patricia Tree结合的一种树形结构&#xff0c;理解MP…

lambda在python中的用法_在python中对lambda使用.assign()方法

我在Python中运行以下代码&#xff1a;#Declaring these now for later use in the plotsTOP_CAP_TITLE Top 10 market capitalizationTOP_CAP_YLABEL % of total cap# Selecting the first 10 rows and setting the indexcap10 cap.loc[:10, :].set_index(id)# Calculating…

react 开发过程中的总结/归纳

1、点击元素&#xff0c;获取绑定该事件的父级元素&#xff0c;使用 e.currentTarget。e.target 获取的是&#xff0c;出发该事件的元素&#xff0c;该元素有可能是所绑定事件的元素的子元素。 2、使用 react router4 history 只能传递给儿子组件&#xff0c;不能传递给孙子组件…

kvm虚拟机--存储池配置梳理(转)

1.创建基于文件夹的存储池&#xff08;目录&#xff09; 2.定义存储池与其目录 1 # virsh pool-define-as vmdisk --type dir --target /data/vmfs 3.创建已定义的存储池 (1)创建已定义的存储池 1 # virsh pool-build vmdisk (2)查看已定义的存储池&#xff0c;存储池不激活无法…

区块链概况:什么是区块链

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 区块链技术自身仍然在飞速发展中&#xff0c;目前还缺乏统一的规范和标准。 wikipedia 给出的定义为&#xff1a; A blockchain —originally, b…

drx功能开启后_简单实用!小米手机中这些新功能真香

小米手机作为国产机热销品牌之一&#xff0c;它除了有好看的外观&#xff0c;还有很多隐藏的实用功能&#xff0c;今天小编就来和大家分享5个小米手机里你不知道的功能。Al电话助理看到陌生号码时&#xff0c;很多人第一反应就是挂掉&#xff0c;不想接听&#xff0c;但又担心自…

Ubuntu 8.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解

Linux版本&#xff1a;Ubuntu8.04 内核版本&#xff1a;Linux 2.6.24 交叉编译器版本&#xff1a;arm-linux-gcc-3.4.1 交叉编译器下载链接&#xff1a; https://share.weiyun.com/5oxlS6X &#xff08;密码&#xff1a;36R7&#xff09; 前言 1、搭建交叉编译环境 安装、配置交…

Installshield 2015 实现检测某安装文件是否存在并运行安装

最近在用installshiled 2015做安装包&#xff0c;用了很长时间研究明白了怎样实现在安装成功界面显示一个checkbox&#xff0c;选中该checkbox&#xff0c;就会安装选中的安装包。 首先我们要有一个installshield的工程。 其次是判断是否要显示这个checkbox。我的需求是根据某个…

区块链概况:从数字货币说起

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 从数字货币说起 货币是人类文明发展过程中的一大发明&#xff0c;最重要的职能包括价值尺度、流通手段、贮藏手段。很难想象离开了货币&#xff0c…

Android RecyclerView 基本使用

Android RecyclerView 基本使用 概述 RecyclerView出现已经有一段时间了&#xff0c;相信大家肯定不陌生了&#xff0c;大家可以通过导入support-v7对其进行使用。 据官方的介绍&#xff0c;该控件用于在有限的窗口中展示大量数据集&#xff0c;其实这样功能的控件我们并不陌生…

lisp语言cond和if套用_在'if'语句中设置多行条件的样式?

Harley Holco..679您不需要在第二个条件行上使用4个空格.也许用:if (cond1 val1 and cond2 val2 andcond3 val3 and cond4 val4):do_something另外,不要忘记空格比您想象的更灵活:if (cond1 val1 and cond2 val2 andcond3 val3 and cond4 val4):do_somethingif (cond1 …

jvm七种垃圾收集器

JVM_七种垃圾收集器介绍 本文中的垃圾收集器研究背景为&#xff1a;HotSpotJDK7一、垃圾收集器概述如上图所示&#xff0c;垃圾回收算法一共有7个&#xff0c;3个属于年轻代、三个属于年老代&#xff0c;G1属于横跨年轻代和年老代的算法。JVM会从年轻代和年老代各选出一个算法进…

新手怎么学以太坊区块链开发?

链客&#xff0c;专为开发者而生&#xff0c;有问必答&#xff01; 此文章来自区块链技术社区&#xff0c;未经允许拒绝转载。 在学习以太坊应用开发时&#xff0c;除了学习solidity开发智能合约&#xff0c;一个小白还应该补充 哪些知识&#xff1f;文本将给出相关的学习资源…