SpringSecurity详细介绍RememberMe功能
本文我们来实现下SpringSecurity的RememberMe功能
一、rememberMe功能实现
接下来我们看看具体怎么实现rememberMe功能
1.表单记住我选项
<%--
Created by IntelliJ IDEA.
User: dengp
Date: 2019/12/1
Time: 20:40
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security"%>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>登录管理</h1>
<form action="/login" method="post">
<security:csrfInput/>
账号:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="checkbox" name="remember-me" value="true">记住我<br>
<input type="submit" value="登录"><br>
</form>
<img src="img/a1.jpg">
</body>
</html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
先测试一下,认证通过后,关掉浏览器,再次打开页面,发现还要认证!为什么没有起作用呢? 这是因为remember me功能使用的过滤器RememberMeAuthenticationFilter默认是不开启的!
2.开启rememberMe
说明
:RememberMeAuthenticationFilter中功能非常简单,会在打开浏览器时,自动判断是否认证,如果没有则 调用autoLogin进行自动认证。
这样RememberMe就设置好了!
二、rememberMe的安全性
记住我功能方便是大家看得见的,但是安全性却令人担忧。因为Cookie毕竟是保存在客户端的,很容易盗取,而且 cookie的值还与用户名、密码这些敏感数据相关,虽然加密了,但是将敏感信息存在客户端,还是不太安全。那么这就要提醒喜欢使用此功能的,用完网站要及时手动退出登录,清空认证信息。
此外,SpringSecurity还提供了remember me的另一种相对更安全的实现机制 :在客户端的cookie中,仅保存一个 无意义的加密串(与用户名、密码等敏感数据无关),然后在db中保存该加密串-用户信息的对应关系,自动登录 时,用cookie中的加密串,到db中验证,如果通过,自动登录才算通过。
三、持久化rememberMe信息
创建一张表,注意这张表的名称和字段都是固定的,不要修改
CREATE TABLE `persistent_logins` (
`username` VARCHAR (64) NOT NULL,
`series` VARCHAR (64) NOT NULL,
`token` VARCHAR (64) NOT NULL,
`last_used` TIMESTAMP NOT NULL,
PRIMARY KEY (`series`)
) ENGINE = INNODB DEFAULT CHARSET = utf8
- 1
- 2
- 3
- 4
- 5
- 6
- 7
然后将spring-security.xml中 改为
<!--
开启remember me过滤器,
data-source-ref="dataSource" 指定数据库连接池
token-validity-seconds="60" 设置token存储时间为60秒 可省略
remember-me-parameter="remember-me" 指定记住的参数名 可省略
-->
<security:remember-me token-validity-seconds="1200"
data-source-ref="dataSource"
remember-me-parameter="remember-me" />
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
然后我们再登录测试,然后我们会发现刚刚的表结构中多了一条记录
说明我们将认证信息持久化到了数据库中了~~
四、获取当前登录信息
前面其实已经使用过SpringSecurity的标签,如果要获取当前认证的账号信息,通过如下的标签即可
当前登录账号:<br>
<security:authentication property="principal.username"/><br>
<security:authentication property="name"/><br>
- 1
- 2
- 3
好了,RememberMe的功能实现还是非常简单了,本文就介绍到此~
文章来源: dpb-bobokaoya-sm.blog.csdn.net,作者:波波烤鸭,版权归原作者所有,如需转载,请联系作者。
原文链接:dpb-bobokaoya-sm.blog.csdn.net/article/details/103408047
- 点赞
- 收藏
- 关注作者
评论(0)