1. 程式人生 > >使用者註冊、登入密碼加密(md5)

使用者註冊、登入密碼加密(md5)

註冊加密

	/**
	 * 處理註冊業務
	 * @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("密碼不正確");
			}
		}
	}