发表于: 2017-10-22 22:01:17

1 681


一.今天完成的主要事情

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处理的,自己思考了一下,在接口中处理异常,主要的目的还是谁调用谁处理,因为功能类虽然是实现功能,但是功能类并不知道出现异常之后怎样处理,所以还不如直接抛出去,谁调用了该方法,谁就负责根据实际情况处理异常

四.收获

以上

五.项目进度情况

已延期,但说什么都不能再延期了...

明天争取将最复杂的两个接口完成,然后后面在登陆接口上花一些时间


返回列表 返回列表
评论

    分享到