目录
提醒:该Demo仅仅完成密码校验修改部分
1.需求
我需要根据 username 去修改 password,前端需要传入用户名,旧密码,新密码三个参数
需求1:需要验证用户是否存在
需求2:新密码不能与老密码相同
需求3:修改密码前,需要验证旧密码
需求4:不能输入空值
2.需求分析
需要验证用户是否存在,需要一个根据username查询user的查询
查询不存在,返回不存在用户;查询存在,得到用户当前密码
前端传入数据时,验证传入的旧密码是否与当前密码相同,验证传入的新密码是否与当前密码相同
3.demo搭建
数据库映射实体类
@Data
public class User {
private Integer id;
private String username;
private String password;
}
Controller
Controller主要做从HTTP请求中获取信息,提取参数,并将其分发给不同的处理服务(service层),并向前端返回service层处理后的数据(JSON数据ModelAndView对象)
修改密码的controller
@RestController
public class UpdatePasswordController {
@Autowired
private UpdatePasswordService updatePasswordService;
@RequestMapping("update")
public void updatePassword(@RequestParam(value = "username") String username,
@RequestParam(value = "password") String password,
@RequestParam(value = "newPsw") String newPsw){
updatePasswordService.updatePassword(username,password,newPsw);
}
}
根据username查询user的controller
@RestController
public class GetUserByUsernameController {
@Autowired
private GetUserByUsernameService getUserByUsernameService;
@RequestMapping("seach")
public @ResponseBody User getUserByUsername(String username){
User user = getUserByUsernameService.getUserByUsername(username);
return user;
}
}
Service
Service主要做逻辑处理,本Demo具体逻辑在此部分进行
修改密码的service
//接口层
@Service
public interface UpdatePasswordService {
String updatePassword(String username,String password,String newPsw);
}
//接口实现层
@Service
public class UpdatePasswordServiceImp implements UpdatePasswordService{
@Autowired
private GetUserByUsernameMapper getUserByUsernameMapper;
@Autowired
private UpdatePasswordMapper updatePasswordMapper;
@Override
public String updatePassword(String username, String password, String newPsw) {
//根据username获取user
User user = getUserByUsernameMapper.getUserByUsername(username);
if (user != null){
if (StringUtils.isEmpty(username)||StringUtils.isEmpty(password)||StringUtils.isEmpty(newPsw)){
System.out.println("输入不能为空");
return "输入不能为空";
}else if (!user.getPassword().equals(password)){
System.out.println("原密码错误");
return "原来密码错误";
}
else if (user.getPassword().equals(newPsw)){
System.out.println("新密码不能与旧密码相同!");
return "新密码不能与旧密码相同!";
}else if (user.getPassword().equals(password)){
updatePasswordMapper.updatePasswordByUsername(username,newPsw);
System.out.println("密码修改成功");
return "密码修改成功";
}else
System.out.println("用户密码未修改");
return "用户密码未修改";
}else{
System.out.println("5");
return "用户不能为空";
}
}
}
根据username查询user的service
@Service
public interface GetUserByUsernameService {
User getUserByUsername(String username);
}
@Service
public class GetUserByUsernameServiceImp implements GetUserByUsernameService {
@Autowired
private GetUserByUsernameMapper getUserByUsernameMapper;
@Override
public User getUserByUsername(String username) {
User user = getUserByUsernameMapper.getUserByUsername(username);
return user;
}
}
Dao
Dao负责和数据库进行操作,本demo因为sql语句简单使用注解,复杂sql建议写xml
修改密码的Dao
@Repository
public interface UpdatePasswordMapper {
@Update("update user set password = #{password} where username = #{username}")
Integer updatePasswordByUsername(@Param("username")String username,@Param("password") String password);
}
根据username查询user的Dao
@Repository
public interface GetUserByUsernameMapper {
@Select("select * from user where username = #{username}")
User getUserByUsername (@Param("username") String username);
}
4.结果验证
原来的密码为1141
密码错误
新密码不能与老密码相同
修改密码成功