发表于: 2017-10-22 22:01:17
1 680
一.今天完成的主要事情
1.编写完成了用户修改密码接口
逻辑实现比较简单
/**
* 3.修改密码
*
* @param:
* @return
* @throws ServiceException
* @throws ServiceDaoException
*/
@RequestMapping(value = "/a/u/password/modify", method = RequestMethod.PUT)
public String modifyPassword(HttpServletRequest request,
HttpServletResponse response, ModelMap model, Long uid,
String oldPassword, String newPassword) throws Exception {
log.info("modifyPassword() parameters: uid :" + uid);
//验证输入的参数
Integer validateResult = UserUtil.validateModifyUserPasswordParams(uid, oldPassword, newPassword);
if (validateResult < 0){
model.addAttribute("code", validateResult);
return "/common/failure";
}
//加密密码
log.info("Encrypt the password.");
String encryptOldPassword = null;
String encryptNewPassword = null;
try{
encryptOldPassword = EncryptionUtil.encryptPassword(oldPassword);
encryptNewPassword = EncryptionUtil.encryptPassword(newPassword);
} catch (Throwable t) {
t.printStackTrace();
log.error(t.getMessage());
log.error("Encrypt password failed!");
model.addAttribute("code", -1);
}
try{
//获取用户对象
User user = userService.getObjectById(uid);
log.info("get user data by id, id is : " + uid);
if (DataUtils.isNullOrEmpty(user)){
log.info("Could't find user by uid, uid is : " + uid);
model.addAttribute("code", -4);
return "/common/failure";
}
//验证密码输入是否正确
if (!encryptOldPassword.equals(user.getLoginPassword())){
log.info("Password error!");
model.addAttribute("code", -2004);
return "/common/failure";
}
//更新用户表
log.info("set user loginPassword to newPassword!");
user.setLoginPassword(encryptNewPassword);
userService.update(user);
model.addAttribute("code", 0);
} catch (Throwable t){
t.printStackTrace();
log.error(t.getMessage());
log.error("modifyPassword() error, uid is : " + uid);
model.addAttribute("code", -1);
return "/common/failure";
}
return "/common/success";
}
主要就是先查找用户,比较旧密码是否正确,比对通过之后修改旧密码为新密码,其中需要注意的是要先对用户输入的密码进行加密,而且在打日志的时候不能够将用户的密码也打印出来
以下是密码加密的功能类
public class EncryptionUtil {
/**
* 利用MD5进行加密
* @param str 待加密的字符串
* @return 加密后的字符串
* @throws NoSuchAlgorithmException 没有这种产生消息摘要的算法
* @throws UnsupportedEncodingException
*/
public static String encryptPassword(String password) throws NoSuchAlgorithmException, UnsupportedEncodingException {
//确定计算方法
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
BASE64Encoder base64en = new BASE64Encoder();
//加密后的字符串
String newstr=base64en.encode(messageDigest.digest(password.getBytes("utf-8")));
return newstr;
}
/**判断用户密码是否正确
* @param newpasswd 用户输入的密码
* @param oldpasswd 数据库中存储的密码--用户密码的摘要
* @return
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
*/
public static boolean checkpassword(String newpasswd, String oldpasswd) throws NoSuchAlgorithmException, UnsupportedEncodingException {
if(encryptPassword(newpasswd).equals(oldpasswd))
return true;
else
return false;
}
}
还要注意处理功能类可能出现的异常
二.明天计划完成的事情
1.继续实现【购买理财产品】story,编写用户投资接口和续投接口
三.遇到的问题
对于自己编写的功能类中抛出的异常应该如何处理呢?是要在功能类中处理呢还是要在接口中处理呢?
询问师兄之后,师兄说真实项目中是在接口中进行try...catch处理的,自己思考了一下,在接口中处理异常,主要的目的还是谁调用谁处理,因为功能类虽然是实现功能,但是功能类并不知道出现异常之后怎样处理,所以还不如直接抛出去,谁调用了该方法,谁就负责根据实际情况处理异常
四.收获
以上
五.项目进度情况
已延期,但说什么都不能再延期了...
明天争取将最复杂的两个接口完成,然后后面在登陆接口上花一些时间
评论