2019独角兽企业重金招聘Python工程师标准>>>

本文为转载学习

原文链接:http://blog.csdn.net/dsundsun/article/details/11826995

作为一个网站来说,记住密码功能是必不可少的,spring security也帮我们实现了这个功能。

看这段配置:

<http auto-config="true" use-expressions="true" ><intercept-url pattern= "/login.do" access="permitAll" /><intercept-url pattern= "/*" access="hasRole('ROLE_USER')" /><form-login login-page="/login.do" /><logout logout-url="/logout" logout-success-url="/" /><remember-me key= "jbcpPetStore"/>
</http >

如果有了remember-me标签,我们怎么让他记住密码呢,肯定猜到了要一个拦截器去拦截一下。

我们猜到了,应该是使用_spring_security_remember_me这个参数,他就应该会被拦截到的。

看一下代码:

这样的话,就可以记住密码了。

那它是如何实现的呢?

Remember me功能设置了一个cookie在用户的浏览器上,它包含一个Base64编码的字符串,包含以下内容:

1.用户的名字;

2.过期的日期/时间

3.一个MD5的散列值包括过期日期/时间、用户名和密码

4.应用的key值,是在<remember-me>元素的key属性中定义的

这些内容将被组合成一个cookie的值存储在浏览器中以备后用。

也就是说spring security提供的remember me功能还是一样存储到cookie中。

关于remember  me的cookie,我们能够看到这个cookie的组成足够复杂,所以对攻击者来
说很难造出一个仿冒的cookie。在第四章中,我们将会学习另一种技术来使得remember me
功能更加安全,免受恶意攻击。

那么rememberme的功能是实现的,他使用的是哪个过滤器呢?其实是o.s.s.web.authentication.rememberme.RememberMeAuthenticationFilter过滤器,他会拦截remember-me请求,并且进行处理.让我们看一下这个具体过程:

从上图可以看出RememberMeAuthenticationFilter依赖一个o.s.s.web.authentication.RememberMeServices来进行具体的校验操作。看到这里,觉得spring security的设计很有意思,每次拦截器都只会拦截请求然后交给别人处理(真实懒啊).不过好的分工和设计,有助于代码的重构行和可读性,也会降低程序的耦合性,非常棒!

我们继续来看<remember-me>标签的属性:

书中建议我们让key足够复杂,最好使用密码随机发生器(online password generator),我们可以搜索一下,然后生成一个随机key;

【设置remember me的会话cookie:如果token-validity-seconds属性被设置成-1,登录cookie将被设置为会话cookie,即在用户关闭浏览器后不会被保存。Token的有效时间是一个不可配置的值为2周(假设用户不关闭浏览器)。不要将这个cookie与存储用户的session  ID的cookie相混淆——它们是不同的事情却有着类似的名字。】

这里涉及到了一个完整认证的概念(这可以通过使用SpEL表达式语言的fullyAuthenticated伪属性来实现),

其实我们可以这样想,对于一个remember-me的用户,每次都可以访问到授权的页面,那样是不合理的,不如有一个哥们用了你的电脑,也是在本地登录了你的账号,他是不是也可以看到你的隐私了呢?这显然不对,对于你的隐私的文件,我们需要完整认证,什么叫完整认证呢,就是说,即使你使用了remember-me登录了,当你访问私密性较高的文件时,还是需要再次验证一次。

配置方式如下:

<intercept-url pattern="/account/*.do"  access="hasRole('ROLE_USER') and fullyAuthenticated"/>

以上是spEL表达式的配法(非常灵活,可以使用逻辑,我们建议使用spEL的方式)

还有一种方式:access=" IS_AUTHENTICATED_FULLY"(不是太灵活,所以不提倡这么做!)

转载于:https://my.oschina.net/heroShane/blog/197013

spring security3.x学习(12)_remember me相关推荐

  1. spring security3.x学习(15)_扩展JdbcDaoImpl。

    2019独角兽企业重金招聘Python工程师标准>>> 本文为转载学习 原文链接:http://blog.csdn.net/dsundsun/article/details/1184 ...

  2. 关于对《Spring Security3》翻译 (第一章 - 第三章)

    原文:http://lengyun3566.iteye.com/category/153689?page=2 翻译说明 最近阅读了<Spring Security3>一书,颇有收获(封面见 ...

  3. 使用Spring Security3的四种方法概述

    使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...

  4. Spring Boot 2 学习笔记(2 / 2)

    Spring Boot 2 学习笔记(1 / 2) - - - 45.web实验-抽取公共页面 46.web实验-遍历数据与页面bug修改 47.视图解析-[源码分析]-视图解析器与视图 48.拦截器 ...

  5. spring security3(转)

    转:spring security3 初探  http://yzxqml.iteye.com/blog/1756106 现在很多企业和开发团队都使用了SSH2(Struts 2 +Spring 2.5 ...

  6. 开源的13个Spring Boot 优秀学习项目

    开源的13个Spring Boot 优秀学习项目!超53K星,一网打尽! 原创: 徐刘根 Java后端技术 5月19日 Spring Boot 算是目前 Java 领域最火的技术栈了,也是Java开发 ...

  7. 春天的故事-Spring Security3十五日研究

    sparta-紫杉   2011-4-2 22:00 前言 南朝<述异记>中记载,晋王质上山砍柴,见二童子下棋,未看完,斧柄已烂,下山回村,闻同代人都去世了,自已还未变老.     因此发 ...

  8. 1 (SSM) springMVC + spring + Mybatis(MySQL)学习笔记 ------ 阶段成果笔记

    学习了一段时间spring,springMVC和Mybatis,从开始学到现在熬了好多夜晚,好几个深夜和bug作战,真是难受. 打算写系列学习笔记,第一篇从一个小的成果说起吧,刚刚学的看这篇可能有点吃 ...

  9. Spring Security3十五日研究

    前言 南朝<述异记>中记载,晋王质上山砍柴,见二童子下棋,未看完,斧柄已烂,下山回村,闻同代人都去世了,自已还未变老.     因此发出"山中方一日,世上几千年" 的慨 ...

最新文章

  1. oracle 11g RAC Grid Infrastructure
  2. 用户自定义的Javascript函数名字与内置函数或宿主函数名字相同时产生的问题。...
  3. Python与Java之间的相互调用——Jython
  4. codis配置_分布式缓存Codis集群安装手册
  5. Android之怎么隐藏EditText光标和自动显示键盘
  6. [洛谷P3391] 文艺平衡树 (Splay模板)
  7. Linux命令发送Http请求
  8. Nacos集群(二)阿里自研弱一致性Distro协议核心实现
  9. OPPO R9S线刷
  10. QT软件开发:基于libVLC内核设计视频播放器
  11. Web前端:一些用于Web开发的最佳精选IDE和代码编辑器
  12. ffmpeg中的时间单位以及时间转换函数(av_q2d av_rescale_q)
  13. COM连接点 - 基本原理(2)
  14. 每日题解:LeetCode 718. 最长重复子数组
  15. 四、SQL函数②(字符串函数)
  16. 游泳馆会员管理系统功能图
  17. div、span、label标签的区别
  18. A 完全k叉树(CCPC-Wannafly Comet OJ 夏季欢乐赛(2019))
  19. canvas根据坐标点绘制图形
  20. 小程序毕设作品之微信电子书阅读小程序毕业设计(1)开发概要

热门文章

  1. 【研究】大脑如何在“知道”与“无知”之间做出决定
  2. 动态 | DeepMind 首次披露旗下专利申请情况
  3. 寒武纪创始人兼CEO陈天石博士的公开信
  4. 2018年智能化发展趋势:语音交互全球开战、AI终端趋势显现
  5. 从贫困的“问题少年”到计算机博士,最后成为商界泰斗,“创业之神”吉姆•克拉克是如何走向封神之路的?...
  6. “金三银四”跳槽需谨慎(送福利礼包)!
  7. 超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码)。...
  8. 如何用纯 CSS 创作一只愤怒小鸟中的黑炮
  9. Wireshark数据包分析之TCP协议包解读
  10. 【朝花夕拾】Android性能篇之(二)Java内存分配