修改密码模块
修改密码页面呈现
服务端关键业务设计及实现
检查PageController中是否有返回UI页面的方法,有则无需添加
@RequestMapping("{module}/{moduleUI}")
public String doModuleUI(@PathVariable String moduleUI) {
return "sys/"+moduleUI;
}
客户端关键业务设计及实现
密码编辑页面呈现
- 业务描述与设计实现
在系统首页左侧操作菜单中点击修改密码时,呈现密码编辑页面。 - 关键代码设计与实现
在starter.html页面尾部的页面加载完成的事件处理函数中添加事件处理,关键代码如下:
<script type="text/javascript">
$(function(){//页面加载完成之后执行
doLoadUI("load-pwd-id","user/pwd_edit");
});
function doLoadUI(id,url){
$("#"+id).click(function(){//事件处理函数
//load函数为一个jquery中的ajax函数,其作用是将url对应的资源,异步加载到指定位置
//此处表示在mainContentId对应的对象位置异步加载url指定资源
$("#mainContentId").load(url);
})
}
</script>
密码修改页面数据持久化实现
服务端关键业务设计及实现
DAO接口定义
-
业务描述及设计实现
基于用户id,修改用户密码和盐值。 -
关键代码设计及实现:
在创建SysUserDao中添加修改用户密码信息的方法。/** * 修改密码 * @param newHashedPassword 加密的密码 * @param newSalt 新的盐值 * @param id 登录用户 * @return */ int updatePassword( @Param("password")String password, @Param("salt")String salt, @Param("id")Integer id);
Mapper映射文件定义
-
业务描述及设计实现
基于用户SysUserDao中修改密码方法的定义,在映射文件中定义映射元素。 -
关键代码设计及实现:
在创建SysUserMapper.xml中定义修改密码对应的映射元素。<update id="updatePassword"> update sys_users set password=#{password}, salt=#{salt}, modifiedTime=now() where id=#{id} </update>
Service接口定义及实现
-
业务描述及设计实现
基于控制层提交的用户相关信息,实现修改密码业务。 -
关键代码设计及实现:
第一步:在SysUserService接口中添加,用于实现密码修改业务的方法。int updatePassword(String source,String newPassword,String cfgPassword);
第二步:在SysUserService接口的实现类SysUserServiceImpl中添加密码修改业务的具体实现。
@Override public int updatePassword(String source, String newPassword, String cfgPassword) { //密码校验 AssertUtil.isArgsValid(StringUtils.isEmpty(source), "原密码不能为空"); AssertUtil.isArgsValid(StringUtils.isEmpty(newPassword), "原密码不能为空"); AssertUtil.isArgsValid(!newPassword.equals(cfgPassword), "两次密码不一致"); //校验原秘密是否正确 //从session中获取用户的信息 SysUser user=(SysUser)SecurityUtils.getSubject().getPrincipal(); //SysUser user = ShiroUtils.getUser(); //检验原密码的正确性 //通过获取原有盐值与输入密码加密再与原秘密比较 SimpleHash sHash = new SimpleHash("MD5",source , user.getSalt(),1); AssertUtil.isArgsValid(!user.getPassword().equals(sHash.toHex()), "原密码不正确"); //修改密码 //设置新的盐值进行重新加密 String newSalt = UUID.randomUUID().toString(); sHash = new SimpleHash("MD5",newPassword , newSalt,1); //执行修改操作 int row = sysUserDao.updatePassword(sHash.toHex(), newSalt, user.getId()); return row; }
Controller类定义
-
业务描述及设计实现
基于客户端提交的修改密码请求,定义处理请求的相关方法及映射。 -
关键代码设计及实现:
在SysUserController类中添加用于实现密码修改的控制层方法。//修改密码 @RequestMapping("doUpdatePassword") public JsonResult doUpdatePassword(String pwd,String newPwd,String cfgPwd) { sysUserService.updatePassword(pwd, newPwd, cfgPwd); return new JsonResult("修改密码成功"); }
客户端关键业务设计及实现
-
业务描述及设计实现
获取修改页面表单中用户填写的数据,然后向服务端发起异步请求进行数据更新。 -
关键代码设计及实现:
第一步:对保存和取消按钮进行事件注册$(function(){ $(".box-footer") .on("click",".btn-cancel",doCancel) .on("click",".btn-save",doUpdateObject) });
第二步:定义保存和取消事件处理函数
function doCancel(){ $("#mainContentId").html(""); }
function doUpdateObject(){ //1.获取用户提交数据 var params={pwd:$("#pwdId").val(), newPwd:$("#newPwdId").val(), cfgPwd:$("#cfgPwdId").val() } //2.定义请求的url var url="user/doUpdatePassword" //3.异步提交请求,执行更新操作 $.post(url,params,function(result){ if(result.state==1){ alert(result.message); //location.href="doLoginUI?t="+Math.random(); location.href="doLogout?t="+Math.random(); }else{ alert(result.message); } }) }