【管理系统】修改密码

1. 持久层

1.1 规划需要执行的sql语句

        UPDATE student SET
            password = #{password},
            modified_user = #{modifiedUser},
            modified_time = #{modifiedTime}
        WHERE sid = #{sid}

1.2 设计接口和抽象方法

    /**
     * 修改学生密码
     * @param sid 学生学号
     * @param password 密码
     * @param modifiedUser 修改者账号
     * @param modifiedTime 修改时间
     * @return 受影响的行数
     */
    Integer changePassword(String sid, String password,
                           String modifiedUser, Date modifiedTime);

1.3 sql映射

    <update id="changePassword">
        UPDATE student SET
            password = #{password},
            modified_user = #{modifiedUser},
            modified_time = #{modifiedTime}
        WHERE sid = #{sid}
    </update>

1.4 单元功能测试

    @Test
    public void changePassword() {
        Integer rows = studentMapper.changePassword("007", "1234567", "管理员", new Date());
        System.out.println(rows);
    }

2. 业务层

2.1 规划异常

  • 学生修改密码过程异常ChangePasswordException
  • 原密码错误异常PasswordNotMatchException // 已规划

2.2 设计接口和抽象方法

    /**
     * 学生修改密码接口
     * @param sid 学生学号
     * @param username 修改者
     * @param oldpassword 旧密码
     * @param newpassword 新密码
     * @return 受影响的行数
     */
    void changepassword(String sid, String username, String oldpassword, String newpassword);
    /**学生修改密码*/
    @Override
    public void changepassword(String sid, String username, String oldpassword, String newpassword) {

        Student student = studentMapper.findByStudentsid(sid);
        if (student == null || student.getIsDelete() == 1) {
            throw new SidNotFoundException("用户数据不存在");
        }

        /**获取盐值对密码加密后进行比较*/
        String salt = student.getSalt();
        String newMd5Password = getMD5Password(oldpassword, salt);
        String rpassword = student.getPassword();

        // 原密码错误
        if (!newMd5Password.equals(rpassword)) {
            throw new PasswordNotMatchException("原密码错误!");
        }
        // 原密码正确,修改新密码
        String newMd5Password2 = getMD5Password(newpassword, salt);
        Integer rows = studentMapper.changePassword(sid, newMd5Password2, username, new Date());
        System.out.println(rows);
        if (rows != 1) {
            throw new ChangePasswordException("密码更新过程异常");
        }
    }

2.3 单元功能测试

@Test
    public void changepassword() {
        studentService.changepassword("12333", "管理员", "123456", "12345678");
    }

3. 控制层

3.1 异常处理

  • 学生修改密码过程异常ChangePasswordException配置在统一异常处理中
else if (e instanceof ChangePasswordException) {
            result.setState(4005);
            result.setMessage("修改密码过程中出现异常");
        }

3.2 设计请求

/stu/changepassword
POST
String oldpassword, String newpassword, HttpSession session
JsonResult< Void >

3.3 处理请求

    @RequestMapping("changepassword")
    public JsonResult<Void> changePassword(String oldpassword, String newpassword, HttpSession session) {
        String sid = getsidFromSession(session);
        String username = getnameFromSession(session);
        studentService.changepassword(sid, username, oldpassword, newpassword);
        return new JsonResult<>(OK);
    }

3.4 单元测试

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值