spring security3.x学习(12)_remember me
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相关推荐
- spring security3.x学习(15)_扩展JdbcDaoImpl。
2019独角兽企业重金招聘Python工程师标准>>> 本文为转载学习 原文链接:http://blog.csdn.net/dsundsun/article/details/1184 ...
- 关于对《Spring Security3》翻译 (第一章 - 第三章)
原文:http://lengyun3566.iteye.com/category/153689?page=2 翻译说明 最近阅读了<Spring Security3>一书,颇有收获(封面见 ...
- 使用Spring Security3的四种方法概述
使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...
- Spring Boot 2 学习笔记(2 / 2)
Spring Boot 2 学习笔记(1 / 2) - - - 45.web实验-抽取公共页面 46.web实验-遍历数据与页面bug修改 47.视图解析-[源码分析]-视图解析器与视图 48.拦截器 ...
- spring security3(转)
转:spring security3 初探 http://yzxqml.iteye.com/blog/1756106 现在很多企业和开发团队都使用了SSH2(Struts 2 +Spring 2.5 ...
- 开源的13个Spring Boot 优秀学习项目
开源的13个Spring Boot 优秀学习项目!超53K星,一网打尽! 原创: 徐刘根 Java后端技术 5月19日 Spring Boot 算是目前 Java 领域最火的技术栈了,也是Java开发 ...
- 春天的故事-Spring Security3十五日研究
sparta-紫杉 2011-4-2 22:00 前言 南朝<述异记>中记载,晋王质上山砍柴,见二童子下棋,未看完,斧柄已烂,下山回村,闻同代人都去世了,自已还未变老. 因此发 ...
- 1 (SSM) springMVC + spring + Mybatis(MySQL)学习笔记 ------ 阶段成果笔记
学习了一段时间spring,springMVC和Mybatis,从开始学到现在熬了好多夜晚,好几个深夜和bug作战,真是难受. 打算写系列学习笔记,第一篇从一个小的成果说起吧,刚刚学的看这篇可能有点吃 ...
- Spring Security3十五日研究
前言 南朝<述异记>中记载,晋王质上山砍柴,见二童子下棋,未看完,斧柄已烂,下山回村,闻同代人都去世了,自已还未变老. 因此发出"山中方一日,世上几千年" 的慨 ...
最新文章
- oracle 11g RAC Grid Infrastructure
- 用户自定义的Javascript函数名字与内置函数或宿主函数名字相同时产生的问题。...
- Python与Java之间的相互调用——Jython
- codis配置_分布式缓存Codis集群安装手册
- Android之怎么隐藏EditText光标和自动显示键盘
- [洛谷P3391] 文艺平衡树 (Splay模板)
- Linux命令发送Http请求
- Nacos集群(二)阿里自研弱一致性Distro协议核心实现
- OPPO R9S线刷
- QT软件开发:基于libVLC内核设计视频播放器
- Web前端:一些用于Web开发的最佳精选IDE和代码编辑器
- ffmpeg中的时间单位以及时间转换函数(av_q2d av_rescale_q)
- COM连接点 - 基本原理(2)
- 每日题解:LeetCode 718. 最长重复子数组
- 四、SQL函数②(字符串函数)
- 游泳馆会员管理系统功能图
- div、span、label标签的区别
- A 完全k叉树(CCPC-Wannafly Comet OJ 夏季欢乐赛(2019))
- canvas根据坐标点绘制图形
- 小程序毕设作品之微信电子书阅读小程序毕业设计(1)开发概要
热门文章
- 【研究】大脑如何在“知道”与“无知”之间做出决定
- 动态 | DeepMind 首次披露旗下专利申请情况
- 寒武纪创始人兼CEO陈天石博士的公开信
- 2018年智能化发展趋势:语音交互全球开战、AI终端趋势显现
- 从贫困的“问题少年”到计算机博士,最后成为商界泰斗,“创业之神”吉姆•克拉克是如何走向封神之路的?...
- “金三银四”跳槽需谨慎(送福利礼包)!
- 超越halcon速度的二值图像的腐蚀和膨胀,实现目前最快的半径相关类算法(附核心源码)。...
- 如何用纯 CSS 创作一只愤怒小鸟中的黑炮
- Wireshark数据包分析之TCP协议包解读
- 【朝花夕拾】Android性能篇之(二)Java内存分配