首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

springsecurity第三章——实现基于内存储器修改密码

2013-12-02 
springsecurity第三章——实现基于内存修改密码为了进一步加强用户体验,提供密码修改功能是必须的。因为密码

springsecurity第三章——实现基于内存修改密码

为了进一步加强用户体验,提供密码修改功能是必须的。因为密码修改功能更多的是应用在用户名和密码都存到数据库的,所以这里基于内存修改密码不会关注存储机制,更多的会关注security框架本身对这种方式的拓展的整体流程和设计。

security框架中提供了一个UserDetailService的实现类InMemoryDaoImpl的类来管理内存用户,它的内存凭证存储使用了一个Map来存储内存中的用户和所关联的UserDetails。而这个UserDetails的实现类,security已经封装好了——o.s.s.core.userDetails.User。

既然我们知道了是InMemoryDaoImpl来管理内存中的用户,那我们只需要对UserDetailService以及它的实现类InMemoryDaoImpl进行拓展就可以达到密码修改的功能了。

?

首先我们需要做的是拓展UserDetailService以及它的实现类InMemoryDaoImpl,拓展完成之后,我们就想办法把我们拓展后的类覆盖掉security框架中原有的处理类。

?

第一步,拓展UserDetailService和InMemoryDaoImpl:

UserDetailService拓展:我们需要一个修改密码的方法,而UserDetailService是不具有的,所以我们需要创建一个继承了UserDetailService的类IChangePassword:

package controller;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.security.core.context.SecurityContextHolder;import org.springframework.security.core.userdetails.UserDetails;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import securityservice.IChangePassword;@Controllerpublic class ChangePasswordController {@Autowiredprivate IChangePassword iChangePasswordDao;@RequestMapping(value="/changePassword",method=RequestMethod.POST)public String changePassword(@RequestParam("newPassword") String newpassword,@RequestParam("oldPassword") String oldpassword){Object principal =SecurityContextHolder.getContext().getAuthentication().getPrincipal();String username=principal.toString();if(principal instanceof UserDetails){username=((UserDetails)principal).getUsername();}//if(((UserDetails)principal).getPassword().equals(oldpassword))//{iChangePasswordDao.changePassword(username, newpassword);//}return "redirect:home.jsp";}}

?

到这里,整个后台过程已经拓展完了,其实这里的拓展并不难,主要还是要理解其整体的处理流程和设计方法,然后按照security框架作者的设计思想去拓展,然后就可以水到渠成了。

?

本文是笔者学习经验所得,仅供参考,希望能帮到有需要的人。

?

?

?

?

热点排行