使用者註冊、登入密碼加密(md5)
阿新 • • 發佈:2018-12-29
註冊加密
/** * 處理註冊業務 * @param username * @param password * @param phone * @param email * @param session * @return */ @RequestMapping(value="/handle_reg.do",method=RequestMethod.POST) @ResponseBody//實質內容 public ResponseResult<Void> handleReg(String username, String password,String phone,String email, HttpSession session){ ResponseResult<Void> rr; User user=new User(); user.setUsername(username); user.setPassword(password); user.setPhone(phone); user.setEmail(email); try{ User u=userService.reg(user); session.setAttribute("uid", u.getId()); session.setAttribute("username", u.getUsername()); rr=new ResponseResult<Void>(ResponseResult.STATE_OK); }catch(UsernameConflictException e){ rr=new ResponseResult<Void>(e); } return rr; }
@Transactional//註釋事務:一旦丟擲RuntimeException異常,事務自動回滾 public User reg(User user) { //根據嘗試註冊的使用者名稱進行查詢,判斷使用者名稱是否被佔用 User u=findUserByUsername(user.getUsername()); if(u!=null){ //使用者名稱被佔用,則: throw new UsernameConflictException("使用者名稱"+user.getUsername()+"已經被註冊"); }else{ //使用者名稱未被佔用,則執行註冊: //把密碼加密。 String salt=UUID.randomUUID().toString(); String md5Password=getEncrpytedPassword(user.getPassword(), salt); user.setPassword(md5Password); //儲存salt,即鹽 user.setUuid(salt); //儲存日誌資訊 Date now=new Date(); user.setCreatedUser("System"); user.setCreatedTime(now); user.setModifiedUser("System"); user.setModifiedTime(now); //使用Mybatis處理insert後,資料的id 將會被封裝到這個物件中。 //在執行以下程式碼之前,user中並沒有id,執行結束後MyBatis會將id封裝到user引數中。 //UserMapper.xml引數中需要設定屬性useGeneratedKeys="true" keyProperty="id"。 userMapper.insert(user); return user; } }
登入時對登入密碼加密後對比
@RequestMapping(value="/handle_login.do",method=RequestMethod.POST) @ResponseBody public ResponseResult<Void> handleLogin(String username,String password,HttpSession session){ ResponseResult<Void> rr; try{ User user=userService.login(username, password); session.setAttribute("uid", user.getId()); session.setAttribute("username", user.getUsername()); rr=new ResponseResult<Void>(ResponseResult.STATE_OK); }catch(ServiceException e){ rr=new ResponseResult<Void>(e); } return rr; }
public User login(String username, String password) {
//根據使用者名稱查詢使用者資訊
User user=findUserByUsername(username);
//判斷是否查詢到匹配的使用者資訊
if(user==null){
//沒有:丟擲異常,使用者名稱不存在UsernameNotExitException
throw new UserNotExitException("使用者名稱"+username+"不存在");
}else{//存在:繼續
//獲取該使用者的鹽(UUID)
String salt=user.getUuid();
//基於鹽,對使用者輸入的密碼進行加密
String md5Password=getEncrpytedPassword(password, salt);
//判斷加密後的密碼與獲取的使用者資訊中的密碼是否匹配
if(md5Password.equals(user.getPassword())){
//匹配,返回查詢到的User物件
return user;
}else{
//不匹配,丟擲異常:密碼不匹配PasswordNotMatchException
throw new PasswordNotMatchException("密碼不正確");
}
}
}