效果:在用户的session(会话)过期或者浏览器关闭后,应用程序仍能记住它。用户可选择是否被记住。(在登录界面选择)
 
“记住”是什么意思?
    就是下次你再访问的时候,直接进入系统,而不需要输入用户名密码。
 
实现原理:使用一个remember-me cookie存储在浏览器内,用户通过该浏览器再次访问网站的时候,网站识别出remember-me cookie,此用户自动登录。
 
两种方式:
①基于Token  => 依赖于“加密签名”,即服务端根据参数生成一个Token进行对比
②基于持久化 => 依赖于数据存储,即服务端将保留Token
 
一、基于Token的Remember-Me
Remember-me cookie : Base64编码过的字符串,存储在浏览器内
包含以下信息:
  • 用户名
  • 过期时间
  • MD5Hash码(token/signature) =>由过期时间、用户名、密码、<remember-me>元素秘钥等字段生成
注意:cookie中并不包含密码,有包含就危险了,虽然MD5码是由密码字段参与生成的,不过MD5是单向的,几乎不可能被破解,况且又不是只有密码,还有其他字段存在
 
Cookie都是不可靠的,如何应用于安全服务?
答:可以将cookie中的token和后台生成的token进行对比,实行“校验”操作
 
操作流程:
    ①用户将Remeber-me cookie发到后台,即包括用户名,过期时间,token
    ②后台通过用户名获取到对应密码
    ③后台利用用户名、密码、过期时间、<remember-me>元素的key这几个字段生成Token
    ④将生成的Token与Cookie中的Token进行对比
    ⑤如果Token相同,则用户自动登录系统

 
为何安全?
答:因为如果不知道key和密码基本不可能生成Token,其一,key只有此应用知道,写死在配置文件里的,其二,密码只有用户本人知道。
 
绝对安全吗?
答:不是的,按照上面的逻辑,只要token是对的,就能登录。这就有问题了,如果token不是本人在用呢?实际上token可能会被窃取。
想象这样一种情况,有个恶意用户通过网络嗅探,获取到了某个用户发请求时候带上的token,然后他也在某天发请求的时候也带上这个token,是不是就直接登录了呢?

 
那怎么防止Token被人嗅探到呢?
答:利用SSL安全协议,即https,用户和服务端的连接是安全的,收发的信息不会被嗅探到。
 
二、基于Persistent(持久化)的Remember-Me
   
Remember-me cookie:
  • Series identifiers(序列化标识符)=> 标识用户初始化登录,不会改变
  • Token => 每次使用Remember-Me特性后,都会改变(每次自动登录都会改变Token)
 
与基于Token的Remember-Me有何不同?
    ①基于Token的Token是通过MD5生成。而基于Persistent的Token是直接根据从数据库中取
    ②基于Token的Token(或者叫签名)除非到达过期时间,或者用户更改了密码,否则不会过期。而基于Persistent的Token,是每次用完就过期了,后台会生成新的Token存储在数据库供下次自动登录使用。
 

Spring Security 之 Remember-Me (记住我)的更多相关文章

  1. Spring Security构建Rest服务-0900-rememberMe记住我

    Spring security记住我基本原理: 登录的时候,请求发送给过滤器UsernamePasswordAuthenticationFilter,当该过滤器认证成功后,会调用RememberMeS ...

  2. Spring Security 实现记住我

    开篇一张图,道理全靠悟. 示例如下: 1.    新建Maven项目  remember_me 2.   pom.xml <project xmlns="http://maven.ap ...

  3. Spring Security框架下实现两周内自动登录"记住我"功能

    本文是Spring Security系列中的一篇.在上一篇文章中,我们通过实现UserDetailsService和UserDetails接口,实现了动态的从数据库加载用户.角色.权限相关信息,从而实 ...

  4. spring security实现记住我下次自动登录功能

    目录 spring security实现记住我下次自动登录功能 一.原理分析 二.实现方式 2.1 简单实现方式 2.2 数据库实现方式 三.区分是密码登录还是rememberme登录 spring ...

  5. spring security remember me实现自动登录

    1 默认策略 在我们自定义的login中增加一个选择框 <input type="submit" value="Login" /> <br/& ...

  6. 第一章 Spring Security是什么?

    1. 介绍 1.1 Spring Security是什么? Spring Security是一个强大的和高度可定制的身份验证和访问控制框架. 它是保证基于spring的应用程序安全的实际标准. 1.2 ...

  7. 使用 Spring Security 保护 Web 应用的安全

    安全一直是 Web 应用开发中非常重要的一个方面.从安全的角度来说,需要考虑用户认证和授权两个方面.为 Web 应用增加安全方面的能力并非一件简单的事情,需要考虑不同的认证和授权机制.Spring S ...

  8. 【Spring】关于Boot应用中集成Spring Security你必须了解的那些事

    Spring Security Spring Security是Spring社区的一个顶级项目,也是Spring Boot官方推荐使用的Security框架.除了常规的Authentication和A ...

  9. Spring Security 入门详解(转)

    1.Spring Security介绍 Spring Security是基于spring的应用程序提供声明式安全保护的安全性框架,它提供了完整的安全性解决方案,能够在web请求级别和方法调用级别 处理 ...

随机推荐

  1. day07_雷神_面向对象进阶

    day07 1.接口类(抽象类) 接口类和抽象类是一种规范,写代码时的规范. 两个思想: 一个是统一接口,一个是定义规则. 最终版本:接口类,抽象类,是一种规范,写代码时的规范 强制性的规定. fro ...

  2. unigui如何连接数据库

    unigui如何连接数据库 UNIGUI既可以二层直连数据库,也可以通过中间件连接数据库. 这里只介绍UNIGUI二层直连数据库. 数据库连接控件.数据集控件都要拖放在MainModule窗体上.UN ...

  3. java的环境变量

    Java学习第一步——JDK安装及Java环境变量配置  2014-05-30 9:09  Java SE  阿超  9226 views Java作为当下很主流的编程语言,学习Java的朋友也越来越 ...

  4. 行人检测(Pedestrian Detection)资源

    一.论文 综述类的文章 [1]P.Dollar, C. Wojek,B. Schiele, et al. Pedestrian detection: an evaluation of the stat ...

  5. WPF实战案例-打印

    在前段时间做了一下打印,因为需要支持的格式比较多,所以wpf能打印的有限分享一下几种格式的打印(.xls .xlsx .doc .docx .png .jpg .bmp .pdf) 首先为了保证exc ...

  6. Asp.Net MVC EF之二:原生EF插入,更新数据的正确方法

    引言 EF是相对与Dapper.NHibernate官方首推的ORM框架,其在开发过程中的方便,快捷毋庸置疑的,但由于EF本身的一些缓存机制.跟踪机制,所以在使用时有些地方需要特别注意. 下面我将自己 ...

  7. DS博客作业03—栈和队列

    1.本周学习总结 本周学习了栈和队列两种数据结构,分别对应后进先出,先进先出两种数据操作 学会栈的特殊类型-共享栈,队列的特殊类型-循环队列的一系列操作 学会熟练使用栈和队列的STL容器,使代码简洁 ...

  8. 基于tkinter的九型人格测试系统介绍

    基于tkinter的九型人格测试系统介绍 一.程序代码地址,GitHub 二.程序介绍 1.login.py 登录界面: 注册界面: 2.mainWindow.py 登录成功之后的界面: 3.doTe ...

  9. 12_python_生成器

    一.生成器 python中有三种方式获取生成器 (1)通过生成器函数 (2)通过各种推导式来实现生成器 (3)通过数据的转换也可以获取生成器   1.只要函数中存在了yield,那么这个函数就是一个生 ...

  10. 输入URL地址到最终页面渲染完成,发生了什么事

    1. 域名DNS解析 - 浏览器DNS缓存 - 系统DNS缓存 - 路由器DNS缓存 - 网络运营商DNS缓存 - 递归搜索...... 2. TCP连接: TCP三次握手 - 第一次握手,由浏览器发 ...