全部开发者教程

企业级在线办公系统

上个小节我们完成了用户登陆的功能,既然有登陆就一定有退出登陆。包括我们之前在小程序上面注册的超级管理员,默认密码是abc123456,这个密码也是能修改的,所以本小节我们还要完成修改密码的功能。

一、用户界面

在main.vue页面的导航区域右侧放置的是员工头像和姓名,当鼠标悬停在其上的时候,会自动弹出菜单,可以让用户修改密码或者退出系统。这节课我们先来把后端的代码给实现了,下节课再去弄前端的程序。

图片描述

二、编写持久层代码

TbUserDao.xml文件中声明修改密码的SQL语句。由于退出系统不需要操作数据库,所以不需要用到持久层。

<update id="updatePassword" parameterType="HashMap">
  UPDATE tb_user
  SET password = HEX(AES_ENCRYPT(#{newPassword}, username))
  WHERE id = #{userId}
  AND password = HEX(AES_ENCRYPT(#{password}, username))
</update>

TbUserDao.java接口中定义抽象方法。

public interface TbUserDao {
    ……
    public int updatePassword(HashMap param);
}

三、编写业务层代码

UserService.java接口中声明抽象方法。

public interface UserService {
    ……
    public int updatePassword(HashMap param);
}

UserServiceImpl.java中实现抽象方法。

public class UserServiceImpl implements UserService {
    ……
    @Override
    public int updatePassword(HashMap param) {
        int rows = userDao.updatePassword(param);
        return rows;
    }
}

四、编写Web层代码

创建UpdatePasswordForm.java类,用于保存前端提交的数据。

@Schema(description = "修改密码表单")
@Data
public class UpdatePasswordForm {
    @NotBlank(message = "password不能为空")
    @Pattern(regexp = "^[a-zA-Z0-9]{6,20}$",message = "password内容不正确")
    @Schema(description = "密码")
    String password;
    
    @NotBlank(message = "newPassword")
    @Pattern(regexp = "^[a-zA-Z0-9]{6,20}$",message = "newPassword内容不正确")
    @Schema(description = "密码")
    private String newPassword
}

UserController.java中声明退出系统和修改密码的两个Web方法。

public class UserController {
    ……
    @GetMapping("/logout")
    @Operation(summary = "退出系统")
    public R logout() {
        StpUtil.logout();
        return R.ok();
    }
    
    @PostMapping("/updatePassword")
    @SaCheckLogin
    @Operation(summary = "修改密码")
    public R updatePassword(@Valid @RequestBody UpdatePasswordForm form) {
        int userId = StpUtil.getLoginIdAsInt();
        HashMap param = new HashMap() {{
            put("userId", userId);
            put("password", form.getPassword());
            put("newPassword", form.getNewPassword());
        }};
        int rows = userService.updatePassword(param);
        return R.ok().put("rows", rows);
    }
}