61--DB项目--修改密码模块设计

修改密码模块

修改密码页面呈现

服务端关键业务设计及实现

​ 检查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);
            }
        })
    }
    

posted on 2020-07-26 22:13  liqiangbk  阅读(360)  评论(0编辑  收藏  举报

导航