zoukankan      html  css  js  c++  java
  • 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);
              }
          })
      }
      
  • 相关阅读:
    【STM32F429】第11章 ThreadX中断优先级配置,含BasePri配置方案
    【STM32H7】第10章 ThreadX任务栈大小确定及其溢出检测
    【STM32F429】第10章 ThreadX任务栈大小确定及其溢出检测
    《安富莱嵌入式周报》第216期:2021.06.07--2021.06.13
    嵌入式新闻早班车-第3期
    嵌入式新闻早班车-第2期
    Keil Studio已经确定为MDK下一代开发工具,更多功能将在今年年底上线
    嵌入式新闻早班车-第1期
    【STM32H7的DSP教程】第32章 STM32H7的实数FFT的逆变换(支持单精度和双精度)
    【STM32F429的DSP教程】第32章 STM32F429的实数FFT的逆变换(支持单精度和双精度)
  • 原文地址:https://www.cnblogs.com/liqbk/p/13382603.html
Copyright © 2011-2022 走看看