上个小节我们完成了用户登陆的功能,既然有登陆就一定有退出登陆。包括我们之前在小程序上面注册的超级管理员,默认密码是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);
}
}