首页 > 编程 > Java > 正文

javaweb项目如何实现手机短信登录

2019-11-26 08:49:49
字体:
来源:转载
供稿:网友

手机号登录在现在的项目中用的场景非常多,实现起来也不难,今天我们就一起来通过演示实现登录过程。

一、首先需要注册个第三方的账户,比如秒嘀科技等,然后拿到三个参数值:QUERAY_PATH   ACCOUNT_SID       AUTH_TOKEN

二、编写获取验证码类getMessage.java

private static final String QUERAY_PATH="xxxx";	private static final String ACCOUNT_SID="xxx";	private static final String AUTH_TOKEN="xxx";	/**	 * @Title: getCode 	 * @Description: TODO( 发送验证码 ) 	 * @param @param phone	 * @param @return 设定文件 	 * @return String 返回类型 	 * @throws	 */	public static String getCode(String phone){		String ran = smsCode();		String timestamp = getStamp();		String sig = getMD5(ACCOUNT_SID, AUTH_TOKEN, timestamp); 		String tamp = "您的验证码为"+ran+",请于{2}分钟内正确输入,如非本人操作,请忽略此短信。"; 		OutputStreamWriter out = null;		BufferedReader br = null;		StringBuilder sb = new StringBuilder();		try {			URL url = new URL(QUERAY_PATH);			HttpURLConnection connection = (HttpURLConnection) url.openConnection();			connection.setRequestMethod("POST");			connection.setDoInput(true);			connection.setDoOutput(true);			connection.setConnectTimeout(5000);			connection.setReadTimeout(10000);			connection.setRequestProperty("Content-type", "application/x-www-form-urlencoded");			out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");			String args = getArgs(ACCOUNT_SID, tamp, phone, timestamp, sig, "JSON"); 			out.write(args); 			out.flush(); 			 			br = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));			String temp="";			while ((temp=br.readLine())!=null) {				sb.append(temp);			}		} catch (Exception e) {			e.printStackTrace();		}				JSONObject json = new JSONObject(sb.toString());		String code = json.getString("respCode");		String defaultrespcode = "00000"; 		if(defaultrespcode.equals(code)){			return ran;		}else{			return code;		}			}	/**	 * @Title: getArgs 	 * @Description: TODO( 参数拼接 ) 	 * @param @param accountSid	 * @param @param smsContent	 * @param @param to	 * @param @param timestamp	 * @param @param sig	 * @param @param respDataType	 * @param @return 设定文件 	 * @return String 返回类型 	 * @throws	 */	public static String getArgs(String accountSid,String smsContent,String to,String timestamp,String sig,String respDataType){		return "accountSid="+accountSid+"&smsContent="+smsContent+"&to="+to+"×tamp="+timestamp+"&sig="+sig+"&respDataType="+respDataType;		}		/**	 * @Title: getStamp 	 * @Description: TODO( 获取时间戳 ) 	 * @param @return 设定文件 	 * @return String 返回类型 	 * @throws	 */	public static String getStamp(){		return	new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());	}	/**	 * @Title: getMD5 	 * @Description: TODO(sig签名 ) 	 * @param @param sid	 * @param @param token	 * @param @param timestamp	 * @param @return 设定文件 	 * @return String 返回类型 	 * @throws	 */	public static String getMD5(String sid,String token,String timestamp){		StringBuilder sBuilder = new StringBuilder();		String source = sid + token + timestamp; 		try {			MessageDigest instance = MessageDigest.getInstance("MD5");			byte[] digest = instance.digest(source.getBytes());			for (byte b : digest) {				String hexString = Integer.toHexString(b&0xff);				if(hexString.length()==1){					sBuilder.append("0"+hexString);				}else{					sBuilder.append(hexString);				}			}		} catch (NoSuchAlgorithmException e) {			// TODO Auto-generated catch block			e.printStackTrace();		}		return sBuilder.toString();	}	/**	 * @Title: smsCode 	 * @Description: TODO( 产生验证码) 	 * @param @return 设定文件 	 * @return String 返回类型 	 * @throws	 */	public static String smsCode(){		String random = new Random().nextInt(1000000)+"";		if(random.length()!=6){			return smsCode();		}else{			return random;		}	}

三、编写servlet

protected void doPost(HttpServletRequest req, HttpServletResponse resp)			throws ServletException, IOException {		resp.setCharacterEncoding("utf-8");		String phone = req.getParameter("phone"); 		String code = GetMessage.getCode(phone);		//手机号登录后		HttpSession session = req.getSession();		PrintWriter out = resp.getWriter();		//检查手机号是否注册过		checkPhoneDao checkPhoneDao = new checkPhoneImpl();		boolean results = checkPhoneDao.checkPhone(phone);		if(!results){			out.print(code);			session.setAttribute("name", "phone");		}else {			out.print("此手机号没有被注册");		}		out.close();	}

四、 dao 层实现 的方法

@Override	public boolean checkPhone(String phone) {		String sql = "select username from user where phone=?";		List<Map<String, Object>> queryForList = DbUtil.queryForList(sql, phone);		if(queryForList.isEmpty()){			return true;		}		return false;	}

到此,短信登录的功能已经实现了,大家可以按照我的思路尝试去实现。注:由于有的小伙伴没有框架基础,所以演示使用jsp+servlet+jdbc实现的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表