Java十天上手做一个自己的web商城笔记-修改密码(5)

    该系列博客主要记录笔者的开发过程,参考B站系列视频:【SpringBoot项目实战完整版】SpringBoot+MyBatis+MySQL电脑商城项目实战_哔哩哔哩_bilibili

所用的一些版本信息:

IDEA开发、JDK1.8版本以上、maven3.61版本以上,springboot,DataGrip管理数据库

修改密码页面如下:

1. 修改密码-持久层

1.1 规划执行的SQL语句

语句1:根据用户UID修改用户password的值。

语句2:根据用户UID查询数据。(在修改密码前,首先保证当前用户数据存在,检测是否标记为逻辑删除,检测输入的原始密码是否正确)。

1.2 编写UserMapper接口

在store\src\main\java\com\cy\store\mapper\UserMapper.java中添加如下方法:

    /**
     * 根据用户uid修改用户密码
     * @param uid
     * @return 受到影响的行数
     * @param password 修改的密码
     * @param modifiedUser 修改的执行者
     * @param modifiedTime 修改数据的时间
     * @return 返回受到影响的行数
     */
    Integer updatePasswordByUid(Integer uid,
                                String password,
                                String modifiedUser,
                                String modifiedTime);

    /**
     * 根据用户id查询用户的数据
     * @param uid
     * @return 返回User对象,否则返回null
     */
    User findByUid(Integer uid);

1.3 SQL的映射

在store\src\main\java\com\cy\store\mapper\UserMapper.java中添加如下映射

    <update id="updatePasswordByUid">
        UPDATE SET t_user
            password = #{password},
            modified_user = #{modifiedUser},
            modified_time = #{modifiedTime}
        where uid=${uid}
    </update>

    <select id="findByUid" resultMap="UserEntityMap">
        SELECT * FROM t_user WHERE uid=#{uid}
    </select>

1.4 单元测试

在 store\src\test\java\com\cy\store\mapper\UserMapperTests.java 下进行测试

    @Test
    public void updatePasswordByUid(){
        userMapper.updatePasswordByUid(1, "666", "管理员", new Date());
    }

    @Test
    public void findByUid(){
        System.out.println(userMapper.findByUid(1));
    }

2. 修改密码-业务层

2.1 规划异常

1.用户源密码错误,is_delete字段为1,当前用户(uid)找不到

2.在更新时有可能产生未知异常

2.2 设计接口和抽象方法

store\src\main\java\com\cy\store\service\IUserService.java 添加接口如下:

    /**
     * 修改密码
     * @param uid
     * @param username
     * @param oldPassword
     * @param newPasaword
     */
    void changePssword(Integer uid,
                       String username,
                       String oldPassword,
                       String newPasaword);

store\src\main\java\com\cy\store\service\impl\UserServiceImpl.java添加实现方法如下:

    @Override
    public void changePssword(Integer uid, String username, String oldPassword, String newPasaword) {
        //查询uid数据是否存在
        User result = userMapper.findByUid(uid);
        if(result==null || result.getIsDelete() == 1){
            throw new UsernameNotFoundException("用户数据不存在");
        }
        //旧密码比较
        String oldMD5Password = getMD5Password(oldPassword,result.getSalt());
        if(!result.getPassword().equals(oldMD5Password)){
            throw new PasswordNotMatchException("密码错误");
        }
        //将新的密码设置到数据库中
        String newMD5Password = getMD5Password(newPasaword, result.getSalt());
        Integer rows = userMapper.updatePasswordByUid(uid, newMD5Password, username, new Date());
        if(rows!=1){
            throw new UpdateException("更新数据时产生未知异常");
        }
    }

2.3 单元测试

在store\src\test\java\com\cy\store\service\UserServiceTests.java 进行单元测试

    @Test
    public void changePssword(){
        userService.changePssword(30, "管理员", "123", "321");
    }

3. 修改密码-控制层

3.1 处理异常

UpdateException进行配置

store\src\main\java\com\cy\store\controller\BaseController.java 中添加如下异常

 

3.2 设计请求

url:users/change_password

请求方式:post

请求参数:oldPassword, newPassword, HttpSession

数据响应:JsonResult<Void>

3.3 处理请求

在 store\src\main\java\com\cy\store\controller\UserController.java 编写以下处理请求的代码:

    @RequestMapping("change_password")
    public JsonResult<Void> changePassword(String oldPassword, String newPassword, HttpSession session){
        Integer uid = getuidFromSession(session);
        String username=getusernameFromSession(session);
        userService.changePssword(uid, username, oldPassword, newPassword);
        return new JsonResult<Void>(OK);
    }

4. 修改密码-前端页面

在password中添加ajax请求的处理

在 store\src\main\resources\static\web\password.html 中修改密码

		<script type="text/javascript">
			$("#btn-change-password").click(function(){
				$.ajax({
					url:"/users/change_password",
					type: "POST",
					data: $('#form-change-password').serialize(),
					dataType:"JSON",
					success:function (json){
						console.log(json)
						if(json.state == 200){
							alert("修改密码成功");
						}else{
							alert("修改密码失败" + json.message);
						}
					},
					error: function(xhr){
						alert("修改密码时产生未知异常" + xhr.message)
					}
				});
			});
		</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值