写点什么

SpringSecurity 详细介绍 RememberMe 功能

  • 2021 年 11 月 11 日
  • 本文字数:1184 字

    阅读完需:约 4 分钟

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>


密码:<inp


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


ut 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>


先测试一下,认证通过后,关掉浏览器,再次打开页面,发现还要认证!为什么没有起作用呢? 这是因为 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


然后将 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" />

评论

发布
暂无评论
SpringSecurity详细介绍RememberMe功能