《Spring Security3》第三章第四部分翻译(修改密码)
?
实现修改密码管理
?这个页面将会通过一个简单的链接添加到“My Account”页面。首先,我们在/account/home.jsp文件中添加一个链接:
?
@RequestMapping(value="/account/changePassword.do",method=RequestMethod.GET)public void showChangePasswordPage() { }@RequestMapping(value="/account/changePassword.do",method=RequestMethod.POST)public String submitChangePasswordPage(@RequestParam("password") String newPassword) { Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); String username = principal.toString(); if (principal instanceof UserDetails) {username = ((UserDetails)principal).getUsername();} changePasswordDao.changePassword(username, newPassword); SecurityContextHolder.clearContext(); return "redirect:home.do";}
?完成这些配置后,重启应用,并在站点的“My Account”下找到“Change Password”功能。
练习笔记比较精细的读者可能意识到这个修改密码的form相对于现实世界的应用来说太简单了。确实,很多的修改密码实现要复杂的多,并可能包含如下的功能:
l? 密码确认——通过两个文本框,确保用户输入的密码是正确的;
l? 旧密码确认——通过要求用户提供要修改的旧密码,增加安全性(这对使用remember me功能的场景特别重要);
l? 密码规则校验——检查密码的复杂性以及密码是否安全。
?
你可能也会注意到当你使用这个功能的时,会被自动退出。这是因为SecurityContextHolder.clearContext()调用导致的,它会移除用户的SecurityContext并要求他们重新认证。在练习中,我们需要给用户做出提示或者找到方法让用户免于再次认证。
小结在本章中,我们更细节的了解了认证用户的生命周期并对JBCP Pet? Store进行了结构性的修改。我们通过添加真正的登录和退出功能,进一步的满足了安全审计的要求,并提升了用户的体验。我们也学到了如下的技术:
l? 配置并使用基于SpringMVC的自定义用户登录界面;
l? 配置SpringSecurity的退出功能;
l? 使用remember me功能;
l? 通过记录IP地址,实现自定义的rememberme功能;
l? 实现修改密码功能;
l? 自定义UserDetailsService和InMemoryDaoImpl。
在第四章中,我们将会使用基于数据库的认证信息存储并学习怎样保证数据库中的密码和其他敏感数据的安全。
1 楼 xosadan 2011-07-09 谢谢分享。。 2 楼 zhonghuafy 2011-07-19 感谢楼主的翻译!非常好。不知楼主有没有英文版的电子书,可否发给我一份?Zhonghuafy@gmail.com。等楼主翻译完,可以联系原作者商议出版。或者做成pdf格式的电子文档。any way,谢谢你的工作!