SpringSecurity详细介绍RememberMe功能

简介: 本文我们来实现下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>


 先测试一下,认证通过后,关掉浏览器,再次打开页面,发现还要认证!为什么没有起作用呢? 这是因为remember me功能使用的过滤器RememberMeAuthenticationFilter默认是不开启的!


2.开启rememberMe


20191205164652329.png

说明: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" />


然后我们再登录测试,然后我们会发现刚刚的表结构中多了一条记录

20191205164838903.png

说明我们将认证信息持久化到了数据库中了~~


四、获取当前登录信息


 前面其实已经使用过SpringSecurity的标签,如果要获取当前认证的账号信息,通过如下的标签即可

当前登录账号:<br>
<security:authentication property="principal.username"/><br>
<security:authentication property="name"/><br>


好了,RememberMe的功能实现还是非常简单了,本文就介绍到此~


相关文章
|
1月前
|
XML 安全 前端开发
SpringSecurity系列(四) Spring Security 实现权限树形菜单
SpringSecurity系列(四) Spring Security 实现权限树形菜单
|
1月前
|
前端开发 安全 Java
SpringBoot 实现登录验证码(附集成SpringSecurity)
SpringBoot 实现登录验证码(附集成SpringSecurity)
101 0
|
1月前
|
XML 安全 Java
SpringSecurity系列(三) Spring Security 表单登录
SpringSecurity系列(三) Spring Security 表单登录
|
1月前
【SpringSecurity 】SpringSecurity 自定义登录页面
【SpringSecurity 】SpringSecurity 自定义登录页面
32 0
|
1月前
|
SQL 安全 Java
【SpringSecurity】简介
【SpringSecurity】简介
32 0
|
9月前
SpringSecurity框架
SpringSecurity框架
18 0
|
11月前
|
存储 安全 Java
SpringSecurity基础-简单登录实现
1.SpringSecurity介绍 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control ,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
73 0
|
11月前
|
存储 安全 Java
二.SpringSecurity基础-简单登录实现
SpringSecurity基础-简单登录实现
|
前端开发 Java 数据库
SpringSecurity非注解方式进行权限控制
写在前面 本文是使用SpringSecurity进行权限控制,此次项目没有采用SpringSecurity的注解形式,因为当你使用SpringSecurity注解形式进行权限控制的时候,当你给一个接口定义了注解过后,那么这个接口所对应的角色也就固定了,如果要修改启动的项目,只有重新修改代码,然后进行部署,本次演示是通过查询数据权限来获取对应的角色来进行匹配是否放行
214 2
SpringSecurity非注解方式进行权限控制