- 浏览: 456501 次
- 性别:
- 来自: 大连
-
博客专栏
-
-
《Spring Secur...
浏览量:386250
文章分类
最新评论
-
蒙奇君杰:
必须感谢一番!!!愿开源的态度为更多的人所拥有,所 认同!
关于对《Spring Security3》一书的翻译说明 -
601235723:
bbjavaeye 写道你好,有个问题请教一下我配了<b ...
《Spring Security3》第四章第一部分翻译下(自定义的UserDetailsService) -
bay0902:
中国互联网的脊梁
Spring Security 3全文下载 -
hdcustc:
项目源码下载 微博网盘里的那个依赖文件损坏了啊 能否提供个可 ...
Spring Security 3全文下载 -
i641878506:
楼主辛苦, 可以提供原书的原项目文件的下载么
Spring Security 3全文下载
《Spring Security3》第三章第三部分翻译上(Remember me功能实现)
- 博客分类:
- Spring Security
- Java
Remember me
对于经常访问站点的用户有一个便利的功能就是remember me。这个功能允许一个再次访问的用户能够被记住,它通过在用户的浏览器上存储一个加密的cookie来实现的。如果Spring Security能够识别出用户提供的remember me cookie,用户将不必填写用户名和密码,而是直接登录进入系统。
与到目前为止我们介绍的其它功能不同,remember me功能并不是在使用security命名空间方式的配置中自动添加的。让我们尝试这个功能并查看它是怎样影响登录流程的。
实现remember me选项
完成这个练习后,将会为用户访问pet store应用提供一个简单的记忆功能。
修改dogstore-security.xml配置文件,添加<remember-me>声明。设置key属性为jbcpPetStore:
<http auto-config="true" use-expressions="true" access-decision- manager-ref="affirmativeBased"> … <remember-me key="jbcpPetStore"/> <logout invalidate-session="true" logout-success-url="/" logout-url="/logout"/> </http>
如果我们现在尝试使用应用,在流程上将不会看到有任何的变化。这是因为还需要在登录form上添加一个输入域,以允许用户选择使用这个功能。编辑login.jsp文件,添加一个checkbox,代码如下:
<input id="j_username" name="j_username" size="20" maxlength="50" type="text"/> <br /> <input id="_spring_security_remember_me" name="_spring_security_ remember_me" type="checkbox" value="true"/> <label for="_spring_security_remember_me">Remember Me?</label> <br /> <label for="j_password">Password</label>:
当我们再次登录时,如果Remember Me被选中,一个Remember Me的cookie将会设置在用户的浏览器中。
如果用户关闭浏览器并重新打开访问一个JBCP Pets站点上需要认证的页面,他将不会再看到登录页了。请亲自试一下——登录并将Remember Me选项选中,收藏首页,然后重启浏览器并再次访问首页。你能发现你直接登录成功并不再需要提供凭证。
一些高级的用户在体验本功能时也可以使用浏览器插件如Firecookie(http://www.
softwareishard.com/blog/firecookie/),来管理(移除)会话session。这将会在你开发或校验这种类型功能时,节省你时间和提高效率。
Remember me是怎样实现的
Remember me功能设置了一个cookie在用户的浏览器上,它包含一个Base64编码的字符串,包含以下内容:
l 用户的名字;
l 过期的日期/时间;
l 一个MD5的散列值包括过期日期/时间、用户名和密码;
l 应用的key值,是在<remember-me>元素的key属性中定义的。
这些内容将被组合成一个cookie的值存储在浏览器中以备后用。
MD5是一种知名的加密哈希算法。加密哈希算法将输入的数据进行压缩并生成唯一的任意长度的文字,这叫做摘要。摘要能够在以后使用,以校验不明的输入是否与生成hash的输入内容完全一致,此时并不需要使用原来的输入内容本身。下面的图片展示了这个过程:
你可以看到,未知的输入可以与存储的MD5哈希进行校验,并能够得出未知的输入与存储的已知输入是否匹配的结论。摘要和加密算法(encryption algorithms)的一个重要不同在于,它很难从反向工程从摘要值得到初始的数据。这是因为摘要仅仅是原始内容的一个概述或指纹(fingerprint,),并不是全部的数据本身(它可能会很大)。
尽管对加密的数据不可能进行解码,但是MD5对一个类型的国际却很脆弱,包括挖掘算法本身的弱点以及彩虹表攻击(rainbow table attacks)。彩虹表通常会包括数百万输入值计算出来的哈希值。这使得攻击者能够寻找彩虹表中的哈希值从而确定实际值(未经过hash的值)。我们将会在第四章:凭证安全存储中讲解密码安全的时,介绍防范这种攻击的一种方法。
关于remember me的cookie,我们能够看到这个cookie的组成足够复杂,所以对攻击者来说很难造出一个仿冒的cookie。在第四章中,我们将会学习另一种技术来使得remember me功能更加安全,免受恶意攻击。
Cookie的失效时间基于一个配置的过期时间段的长度。如果用户在cookie失效之前重新访问我们的站点,这个cookie将和应用设置的其它cookie一起提交到应用上。
如果存在remember me cookie,o.s.s.web.authentication.rememberme.RememberMeAuthenticationFilter过滤器将会检查cookie的内容并通过检查是否为一个认证过的remember me cookie来认证用户(查看本章后面的Remember me是否安全?章节,将会讲述这样做的原因),这个过滤器是通过<remember-me>配置指令添加到过滤器链中的。
下面的图表阐述了校验remember me cookie过程中涉及到的不同组件:
RememberMeAuthenticationFilter在过滤器链中,位于SecurityContextHolderAwareRequestFilter之后,而在AnonymousProcessingFilter之前。正如链中的其它过滤器那样,RememberMeAuthenticationFilter也会检查request,如果是其关注的,对应的操作将会被执行。
按图中所述,过滤器负责检查用户的过滤器是否remember me cookie作为它们请求的一部分。如果remember me被发现,它会是一个Base64的编码,期望的MD5哈希值通过cookie中的用户名和密码进行计算获得。(这里感觉有些问题,因为期望的MD5值应该是通过应用来进行获取,而不是提供前台过来的cookie计算出来的。?)如果cookie通过这一层的校验,用户就已经登录成功了。
【你可能已经意识到如果用户修改了用户名或密码,任何的remember me token都将失效。请确保给用户提供适当的信息,如果允许它们修改账号的那些信息。在第四章中,我们将会看到一个替代的remember me实现,它只依赖用户名并不依赖密码。】
我们看到RememberMeAuthenticationFilter依赖一个o.s.s.web.authentication.RememberMeServices的实现来校验cookie。如果登录请求的request包含一个名为_spring_security_remember_me 的form参数,相同的实现类也会于form登录成功时使用。这个cookie用上面提到的信息进行编码,以Base64编码存储在浏览器中,包含了时间戳和用户密码等信息形成的MD5哈希值。
需要记住的是,可以区分通过remember me认证的用户和提供用户名和密码(或相当凭证)认证的用户。我们将会在审查remember me功能的安全性的时,对其进行简单的实验。
Remember me与用户的生命周期
RememberMeServices的实现在用户的生命周期中(一个认证用户session的生命周期)在好几个地方被调用。为了使你理解remember me功能,了解remember me service完成生命周期功能的时间点将会有所帮助:
行为 |
应该做什么? |
登录成功 |
实现类设置remember me cookie(如果设置了对应的form参数) |
登录失败 |
如果存在的话,实现类应该删掉这个cookie |
用户退出 |
如果存在的话,实现类应该删掉这个cookie |
知道RememberMeServices在何时以及怎样与用户的生命周期关联对于创建自定义的认证处理至关重要,因为我们需要保证任何的自定义认证处理对待RememberMeServices保持一致性,以保证这个功能的有效性和安全性。
Remember me配置指令
可以修改两个常用的配置来改变remember me功能的默认行为:
属性 |
描述 |
Key |
为remember mecookie定义一个唯一的key值,以与我们的应用关联 |
token-validity-seconds |
定义时间的长度(以秒计)。Remember me的cookie将在将被视为认证合法,并且也将用于设置cookie的过期时间。 |
通过对cookie哈希内容生成的讲解你可以推断出,Key属性对与remember me功能的安全性很重要。要保证你选择的key值是你的应用唯一使用的,并且足够长以至于不能很容易的被猜出。
请记住本书的目的何在,我们让key的值相对很简单,但是如果你要使用remember me功能在你的应用中,建议key值包含应用的唯一名称以及至少36位长度的随机字符。密码生成工具(在google中搜索“online password generator”)是一个好办法来得到包含文字数字以及特殊字符组成的伪随机混合内容,以作为你的remember me key值。
还要记住的是应用处于不同的环境中(如开发、测试、产品级等),remember me cookie的值也要考虑这些情况。这能够避免remember me cookie在测试阶段被无意中的错误使用。
一个产品环境的应用中,示例的key值如下:
jbcpPets-rmkey-paLLwApsifs24THosE62scabWow78PEaCh99Jus
token-validity-seconds属性被用来设置remember me token被接受作为自动登录功能(即使要校验的token不合法)的秒数。本属性还会设置用户浏览器中登录cookie能够被保存的最长时间。
【设置remember me的会话cookie:如果token-validity-seconds属性被设置成-1,登录cookie将被设置为会话cookie,即在用户关闭浏览器后不会被保存。Token的有效时间是一个不可配置的值为2周(假设用户不关闭浏览器)。不要将这个cookie与存储用户的session ID的cookie相混淆——它们是不同的事情却有着类似的名字。】
关于remember me功能的高级自定义功能,还有几个其它的配置指令。我们将会在接下来的练习中包含部分,另一部分在第六章:高级配置与扩展中包含,那时会介绍高级的授权技术。
评论



这里的MD5确实是通过前台传过来的cookie计算出来的,看这个方法:
String org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.makeTokenSignature(long tokenExpiryTime, String username, String password)
/** * Calculates the digital signature to be put in the cookie. Default value is * MD5 ("username:tokenExpiryTime:password:key") */ protected String makeTokenSignature(long tokenExpiryTime, String username, String password) { String data = username + ":" + tokenExpiryTime + ":" + password + ":" + getKey(); MessageDigest digest; try { digest = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { throw new IllegalStateException("No MD5 algorithm available!"); } return new String(Hex.encode(digest.digest(data.getBytes()))); }

呵呵,没事的
昨天和一个翻译过不少书的朋友交流了一下,确实有些地方翻译的还不好
等我把前三章翻译完,再好好检查一遍
发表评论
-
Spring Security 3全文下载
2012-03-15 20:31 20491本书已经翻译完成,提供给大家下载 以下地址为ITEYE的电子 ... -
《Spring Security3》附录翻译(参考资料)
2012-02-13 22:58 6642附录:参考材料 在本附录中, ... -
《Spring Security3》第十三章翻译(迁移到Spring Security 3)
2012-02-13 22:50 5423第十三章 迁移到Spring Security 3 ... -
《Spring Security3》第十二章翻译(Spring Security扩展)
2012-02-13 22:38 8070第十二章 Spring Security扩展 ... -
《Spring Security3》第十一章(客户端证书认证)第二部分翻译
2012-02-13 22:23 5006在Spring Security中配置客户端证书认证 ... -
《Spring Security3》第十一章(客户端证书认证)第一部分翻译
2012-02-13 22:00 6251第十一章 客户端证书认证(Client Cert ... -
《Spring Security3》第十章(CAS)第二部分翻译(CAS高级配置)
2012-01-19 13:07 8667高级CAS配置 ... -
《Spring Security3》第十章(CAS)第一部分翻译(CAS基本配置)
2012-01-19 12:54 12393第十章 使用中心认证服务(CAS)进行单点登录 ... -
《Spring Security3》第九章(LDAP)第三部分翻译(LDAP明确配置)
2012-01-19 12:44 6482明确的LDAP bean配置 ... -
《Spring Security3》第九章(LDAP)第二部分翻译(LDAP高级配置)
2012-01-19 12:36 7264LDAP的高级配置 一旦我们 ... -
《Spring Security3》第九章(LDAP)第一部分翻译(LDAP基本配置)
2012-01-19 12:22 6240第九章 LDAP目录服务 在本章中,我们 ... -
《Spring Security3》第八章第三部分翻译(属性交换)
2012-01-18 15:46 2982属性交换(Attribute Exchange) ... -
《Spring Security3》第八章第二部分翻译(OpenID用户的注册)
2012-01-18 13:39 5448OpenID用户的注册问 ... -
《Spring Security3》第八章第一部分翻译(OpenID与Spring Security)
2012-01-17 22:38 7588第八章 对OpenID开放 OpenID是 ... -
《Spring Security3》第七章第三部分翻译(ACL的注意事项)
2012-01-17 22:25 2734典型ACL部署所要考虑的事情 ... -
《Spring Security3》第七章第二部分翻译(高级ACL)(下)
2012-01-17 22:17 4234支持ACL的Spring表达式语言 SpEL对A ... -
《Spring Security3》第七章第二部分翻译(高级ACL)(上)
2012-01-10 22:59 4719高级ACL话题 一些高级的话 ... -
《Spring Security3》第七章第一部分翻译(访问控制列表ACL)
2011-12-30 22:02 9551第七章 访问控制列表(ACL) 在本章中, ... -
《Spring Security3》第六章第七部分翻译(认证事件处理与小结)
2011-11-22 22:37 5536认证事件处理 有一个重要的功能只能通 ... -
《Spring Security3》第六章第六部分翻译(Spring Security基于bean的高级配置)
2011-11-22 22:25 5557Spring Security基于bean的高级配置 ...
相关推荐
内容概要:本文深入剖析了安川MP7系列工业控制系统的关键源码,重点介绍了运动轨迹规划、通信协议处理以及故障处理机制等方面的技术细节。通过对实际代码片段的解读,揭示了该系统在硬件寄存器直接访问、特殊功能码处理等方面的独特之处。同时,文中还分享了一些基于实践经验得出的重要参数设置及其背后的故事,如特定摩擦补偿系数的选择原因等。 适合人群:从事工业自动化领域的工程师和技术人员,尤其是对安川产品有一定了解并希望深入了解其内部工作机制的专业人士。 使用场景及目标:帮助读者掌握安川MP7系列控制器的工作原理,提高对类似系统的维护能力和故障排查效率。对于想要进一步研究或二次开发该系统的开发者来说,也能提供宝贵的参考资料。 其他说明:文章不仅限于理论讲解,还包括了许多来自一线的实际案例和经验教训,使读者能够更好地理解和应用所学知识。
自动化测试与脚本开发_Python3_pynput_键盘鼠标操作录制执行代码生成工具_用于自动化测试_脚本录制_重复操作模拟_宏命令生成_提高工作效率_支持GUI界面_跨平台兼容_
嵌入式八股文面试题库资料知识宝典-深入分析Windows和Linux动态库应用异同.zip
嵌入式八股文面试题库资料知识宝典-C语言总结.zip
内容概要:本文详细探讨了风储直流微电网中母线电压控制的关键技术。首先介绍了风储直流微电网的背景和发展现状,强调了母线电压控制的重要性。接着阐述了永磁风机储能并网技术,解释了永磁风机如何通过直接驱动发电机将风能转化为电能,并确保与电网的同步性和稳定性。然后深入讨论了双闭环控制MPPT技术,这是一种通过内外两个闭环控制系统来实现实时调整发电机运行参数的技术,确保风机始终处于最大功率点附近。最后,文章探讨了储能控制母线电压平衡的方法,即通过储能系统的充放电操作来维持母线电压的稳定。结论部分指出,通过这些技术的有机结合,可以实现对风储直流微电网的有效管理和优化控制。 适合人群:从事新能源技术研发的专业人士、电气工程研究人员、风电系统工程师。 使用场景及目标:适用于希望深入了解风储直流微电网母线电压控制策略的研究人员和技术人员,旨在帮助他们掌握最新的控制技术和方法,以提高系统的稳定性和效率。 其他说明:文章还对未来风储直流微电网的发展进行了展望,指出了智能化和自动化的趋势,以及储能技术的进步对系统性能的影响。
嵌入式八股文面试题库资料知识宝典-C++object-oriented.zip
内容概要:文章详细介绍了HarmonyOS的目录结构及其重要性,从整体框架到核心目录的具体功能进行了全面剖析。HarmonyOS凭借其分布式架构和跨设备协同能力迅速崛起,成为全球操作系统领域的重要力量。文章首先概述了HarmonyOS的背景和发展现状,强调了目录结构对开发的重要性。接着,具体介绍了根目录文件、AppScope、entry和oh_modules等核心目录的功能和作用。例如,AppScope作为全局资源配置中心,存放应用级的配置文件和公共资源;entry目录是应用的核心入口,负责源代码和界面开发。此外,文章还对比了HarmonyOS与Android、iOS目录结构的异同,突出了HarmonyOS的独特优势。最后,通过旅游应用和电商应用的实际案例,展示了HarmonyOS目录结构在资源管理和代码组织方面的应用效果。; 适合人群:具备一定编程基础,尤其是对移动操作系统开发感兴趣的开发者,包括初学者和有一定经验的研发人员。; 使用场景及目标:①帮助开发者快速理解HarmonyOS的目录结构,提高开发效率;②为跨设备应用开发提供理论和技术支持;③通过实际案例学习资源管理和代码组织的最佳实践。; 其他说明:HarmonyOS的目录结构设计简洁明了,模块职责划分明确,有助于开发者更好地管理和组织代码和资源。随着万物互联时代的到来,HarmonyOS有望在开发便利性和生态建设方面取得更大进展,吸引更多开发者加入其生态系统。
内容概要:本文详细介绍了飞轮储能充放电控制的Simulink仿真模型,重点在于采用永磁同步电机的矢量控制和dq轴解耦控制策略。充电时,外环控制转速,内环控制dq轴电流;放电时,外环控制直流母线电压,内环同样控制dq轴电流。文中还讨论了硬件与软件环境的选择,以及仿真模型的调试与运行情况,最终得出该模型具有良好的跟随性能和波形完美度。 适用人群:从事电力电子系统、储能技术和Simulink仿真的研究人员和技术人员。 使用场景及目标:适用于需要对飞轮储能系统进行深入研究和仿真的场合,旨在提高充放电效率和稳定性,满足不同应用场景的需求。 其他说明:该仿真模型已调试完成,可以直接用于进一步的研究和实际应用,为未来的飞轮储能技术研发提供了有价值的参考。
嵌入式八股文面试题库资料知识宝典-北京瑞德方科技.zip
嵌入式八股文面试题库资料知识宝典-同方万维硬件测试工程师.zip
1_15套python PDF格式.zip
内容概要:本文详细介绍了三相三电平整流器的仿真过程及其性能分析。文中首先概述了三相三电平整流器的基本概念及其在电力系统中的重要作用,接着重点探讨了电压电流双闭环控制方式的工作原理和优势,以及SPWM调制技术的具体应用。通过仿真文件展示了整流器在不同条件下的响应情况,验证了这两种技术的有效性和优越性。最后,作者表达了对未来实际应用的期望。 适合人群:从事电力电子研究的技术人员、高校相关专业师生、对电力控制系统感兴趣的工程爱好者。 使用场景及目标:适用于希望深入了解三相三电平整流器工作原理和技术细节的研究人员;目标是在理论基础上掌握电压电流双闭环控制和SPWM调制的实际应用方法。 其他说明:本文提供的仅为仿真文件,未涉及实物实验数据。
嵌入式八股文面试题库资料知识宝典-恒光科技.zip
嵌入式八股文面试题库资料知识宝典-北京天华威视科技有限公司面试题.zip
嵌入式八股文面试题库资料知识宝典-微软研究院笔试题目的答案.zip
Arduino UART实验例程,开发板:正点原子EPS32S3,本人主页有详细实验说明可供参考。
嵌入式八股文面试题库资料知识宝典-朝歌数码.zip
嵌入式八股文面试题库资料知识宝典-Cortex系列.zip
嵌入式八股文面试题库资料知识宝典-中科中科长青笔试题.zip
内容概要:本文详细介绍了自适应巡航(ACC)控制和纵向跟车避撞控制的分层式控制策略。上层控制通过建立离散跟车运动学模型和基于反馈校正的跟车预测模型,获得期望加速度;下层控制则根据上层提供的数据计算期望制动压力和节气门开度。文中特别强调了引入松弛因子进行多目标优化求解,以及利用模糊控制动态调整权重系数的方法,如车间距误差权重系数q_Δd、两车相对速度权重系数q_vrel和自车加速度权重系数q_ar。通过这种方式,系统能够在复杂多变的道路环境中保持灵活性和稳定性。仿真结果显示,在前车以50~70km/h的正弦速度变化行驶的情况下,自车能够平稳跟车,各项参数变化平稳。 适合人群:从事智能车辆研究的技术人员、自动驾驶领域研究人员、高校相关专业师生。 使用场景及目标:适用于智能车辆系统的设计与开发,特别是需要提升ACC系统性能的研究项目。目标是提高驾驶的安全性、舒适性和经济性。 其他说明:实验基于Matlab/Simulink 2021a和Carsim 2019.0版本完成,提供了完整的运行视频和参考资料。