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

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

 

一、首先需要注册个第三方的账户,比如秒嘀科技等,然后拿到三个参数值: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+"&timestamp="+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实现的。

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

(0)

相关推荐

  • JAVA实现利用第三方平台发送短信验证码

    前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能. 发送短信验证码的原理是:随机生成一个6位数字,将该6位数字保存到session当中,客户端通过sessionid判断对应的session,用户输入的验证码再与session记录的验证码进行比较. 为了防止有广告嫌疑

  • Java利用MessageFormat实现短信模板的匹配

    其实没什么技术含量,因为老是想不起来,所以在此文做下记录. 通常我们的应用系统中都会有很多短信的发送,或者是信息邮件等的推送,而这些信息却有着相同的共性,比如只是用户名换了下. 像下面这条,除了红色字体外,其余都是相同的. 尊敬的客户:您的支付宝账户110****11签约网商贷于2018-06-10应还1999.99元,系统将于2018-06-10从该支付宝账户余额.绑定储蓄卡.余额宝.您的网商银行结算账户及余利宝(如有)自动扣款,因余额和储蓄卡还贷款有限额限制,请优先确保余额宝.网商银行结算账

  • java实现短信通信的完整教程

    前言 短信信息的发送目前已经是项目中必不可少的部分,我们怎么通过web页面来实现把信息推送到别人手机上呢?简单点,编码的方式简单点!看完本篇文章,以后要实现短信的发送都只需要知道发什么?发给谁?就OK了,代码如下,是不是很简单^_^ String result= "";//返回状态 Note note = new Note(); String Tel = "17089490559";//接收人手机号 String message = "您好!";

  • Java实现发送短信验证码功能

    一个发送短信验证码的功能,使用的是信易通的短信平台接口,然后在Java中使用HttpClient模拟POST请求或者GET请求(看短信平台要求,一般的情况下都是POST请求),调用短信平台提供的接口(遵循短信平台的接口规范即可).具体看代码: 使用HttpClient的时候需要在项目中引入: commons-httpclient-3.1.jar 这个jar包, 项目结构: 1.创建一个Http的模拟请求工具类,然后写一个POST方法或者GET方法 /** * 文件说明 * @Descriptio

  • java实现短信验证码5分钟有效时间

    本文实例为大家分享了java实现短信验证码5分钟有效时间,供大家参考,具体内容如下 实现一个发送短信验证码的请求,要求5分钟之内重复请求,返回同一个验证码. 网上可找到几种方案: 如,存储数据库或缓存中.实现起来比较麻烦,舍弃: 另一种方式即本例,使用session存储.其他方式,暂未进一步了解. 实现步骤: (springmvc) 1.controller中,获取session对象,取code,取不到新生成,并存储session中: 2.单手机号发送量,判断并 +1 记入数据库: 3.Time

  • 基于Java随机生成手机短信验证码的实例代码

    简单版 /** * 产生4位随机数(0000-9999) * * @return 4位随机数 */ public static String getFourRandom() { return StringUtils.leftPad(new Random().nextInt(10000) + "", 4, "0"); } 复杂版 /** * 创建指定数量的随机字符串 * @param numberFlag 是否是数字 * @param length * @return

  • JavaWeb登陆功能实现代码

    本文实例为大家分享了JavaWeb登陆功能的方法,供大家参考,具体内容如下 首先我们要JavaWeb登陆的基本流程:JSP页面发送请求-->Servlet-->Servlet通过调用方法从数据库中得到数据并将结果返回页面. 我们先建立三个jsp页面,包括login.jsp(登陆页面).index.jsp(显示登陆成功后的信息).error.jsp(登录失败的页面),其中后两个页面的内容可以随意写,而login.jsp页面的主要内容如下: <form action="LoginS

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

    手机号登录在现在的项目中用的场景非常多,实现起来也不难,今天我们就一起来通过演示实现登录过程.   一.首先需要注册个第三方的账户,比如秒嘀科技等,然后拿到三个参数值:QUERAY_PATH   ACCOUNT_SID       AUTH_TOKEN 二.编写获取验证码类getMessage.java private static final String QUERAY_PATH="xxxx"; private static final String ACCOUNT_SID=&quo

  • 使用java实现手机短信验证全过程

    一.容联云平台 容联云平台是实现短信验证.还有语音功能等一些操作的平台,在平台注册还可以获得8元的新手额度,一条短信的费用是006元,也就是6分钱,在初学者测试也是可以非常人性化的,然后我这次进行测试的平台呢,也是用到容联云给进行展示 二.操作教程 2.1注册 当你注册进去之后会有8元的新手额度 填写测试号码 然后这里差不多了跟着下面走着 三.实践操作 3.1部署项目使用工具 本次使用的工具是IDEA,然后我为了简便就直接创建了Maven项目进行开发,因为使用到Maven之后是直接导入SDK的依

  • SpringBoot使用榛子云实现手机短信发送验证码

    首先去榛子云官方平台申请注册自己的账号,官方网站:http://smsow.zhenzikj.com/ 有账号的话就直接登录,没有注册一个即可,很简单的注册 登录成功后就是这个样子,官方提供免费发送一条,但是我反复测试一些功能效果显然1条是不够的,我冲了20,为了开发我冲了!!!凭这20元,我要20个赞不过分吧QAQ, 充值最低的话是20元,支持微信支付宝支付,一条短信也就3分钱左右,可以给朋友装b用什么的,接下来进入正题 在"应用管理"-->"我的应用"里,

  • Redis实现短信登录的企业实战

    目录 一.导入黑马点评项目 1. 导入SQL 2. 前后端分离 3. 导入后端项目 4. 导入前端项目 二.基于Session实现登录流程 1. 发送短信验证码 2. 短信验证码登录.注册 3. 登录验证功能 三.集群的session共享问题 四.基于Redis实现共享session的登录功能 1. 选择合适的数据结构存入Redis 2. 发送短信验证码 3. 短信验证码登录.注册 4. 解决token刷新问题 一.导入黑马点评项目 黑马点评项目主要包括以下功能: 这一章主要介绍短信登录功能,短

  • 手机短信轰炸(图)

    手机和网络早已密不可分,通过网络,可以直接发送信息到手机上,只是现在已经没有 免费发送短信的网站,如果想通过网站发送短信到手机上,必须先注册用户,确认后才可以 发送信息,只是那样以来,呵呵,发一条信息就是一毛钱,呵呵,我可没那么多钱.呵呵 是不是很纳闷啊,呵呵 好了,我来仔细说说. 首先分析网上可以发送手机短信的网站结构.特别是他们如何确认用户已经注册成功呢. 一般说来有如下步骤: 1.用户认可网站提出的服务协议 2.用户进入注册页面,填写自己的手机号码 3.由服务器接受用户提交的手机号码,并发

  • java实现发送手机短信

    本文主要研究了JAVA语言发送手机,分享给大家,供大家参考,具体内容如下 JAVA发送手机短信,流传有几种方法: (1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册; (2)使用短信mao的方式进行短信的发送,这种方式应该是比较的常用,前提是需要购买硬件设备,呵呵; (3)使用中国网建提供的SMS短信平台,我的这个小的demo,是基于这个行是发送的. 说明:java实现发送手机短信 /** * 说明:java实现发送手机短信

  • C#怎么实现手机短信发送功能

    为了个人信息的安全,很多网站都有短信发送的功能,究竟是怎么实现的呢?对于个人站长来说的话,通过使用SMS短信通API接口相对比较划算和简单.那怎么实现呢,步骤如下: 1. 从网上(http://sms.webchinese.cn/)申请账号,记住用户名,密码会发到手机上,这仅是登陆密码.注册后会送5条短信.和3条彩信的发送量. 2.查看SMS短信通API下行接口(http://sms.webchinese.cn/api.shtml),然后获取秘钥,其实就是加密后的登录密码.开始敲代码,相关代码如

  • python twilio模块实现发送手机短信功能

    前排提示:这个模块不是用于对陌生人进行短信轰炸和电话骚扰的,这个模块也没有这个功能,如果是抱着这个心态来的,可以关闭网页了 语言:python 步骤一:安装twilio模块 pip install twilio 步骤二:进入官网注册 https://www.twilio.com 注册完毕之后,会有一个调查,问你准备做什么项目,在这里先选择短信项目 项目创建之后,申请一个试用号码 在上方图片中有用的信息有三个:试用号码,账号SID,和验证令牌,后两个用右边的复制按钮进行复制 步骤三:绑定一个手机号

  • 15行Python代码实现免费发送手机短信推送消息功能

    实现的功能: 通过代码定时给手机推送短信,短信内容可以自定义文字,当然你也可以去别的网站爬取每日心灵鸡汤,天气预报或其它信息进行推送.关于爬取数据可以参考:Python40行代码实现天气预报和每日鸡汤推送 本文主要讲如何实现发送短信的功能,全部代码只用15行. 首先贴出实现的效果图,后面再分两步详细描述实现过程,第一步免费注册api接口,第二步只需要写10来行代码. 代码运行后本地收到返回的执行情况: 手机收到代码发送过来的短信截图: 实现过程: 1.免费注册获取发送短信的api接口 我们需要A

  • 微信小程序实现短信登录的实战

    目录 1.界面效果预览 2.uView安装 3.uView配置 3.1 main.js中引入 3.2 uni.scss中引入 3.3 App.vue中引入 3.4 pages.json中配置 4.短信登录界面 5.点击获取验证码接口 项目要求增加短信登录及人脸识别登录功能,下面我们来实现下短信登录功能 1.界面效果预览 2.uView安装 uView官网:https://www.uviewui.com 以npm安装为例,执行:npm install uview-ui即可 3.uView配置 3.

随机推荐