javaweb项目中实现手机短信登录

简介: javaweb项目中实现手机短信登录手机号登录在现在的项目中用的场景非常多,实现起来也不难,今天我们就一起来通过演示实现登录过程。<1>首先需要注册个第三方的账户,比如秒嘀科技等,然后拿到三个参数值:QUERAY_PATH ACCOUNT_SID AUTH_TOKEN<2>编写获取验证码类getMessage.

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

<1>首先需要注册个第三方的账户,比如秒嘀科技等,然后拿到三个参数值:QUERAY_PATH ACCOUNT_SID AUTH_TOKEN
<2>编写获取验证码类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;
    }
}

<3> 编写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();
}

<4> 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实现的。

作者:行走在江湖
来源:CSDN
原文:https://blog.csdn.net/weixin_38008100/article/details/81570392
版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章
|
1月前
|
存储 JSON JavaScript
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-1
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
25 0
|
3月前
|
Java 关系型数据库 MySQL
基于SSM的手机商城管理系统(有报告)。Javaee项目。
基于SSM的手机商城管理系统(有报告)。Javaee项目。
|
18小时前
|
安全 Linux 网络安全
手机登录服务器用root和administrator做登录名,都提示别名已存在
【2月更文挑战第5天】手机登录服务器用root和administrator做登录名,都提示别名已存在
19 8
|
1月前
|
JSON 前端开发 安全
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-2
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
31 0
|
3月前
|
开发工具
uniapp项目怎么连接手机调试
uniapp项目怎么连接手机调试
44 0
|
3月前
|
JSON 前端开发 安全
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-2
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
26 0
|
3月前
|
存储 JSON JavaScript
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-1
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
42 0
|
3月前
如何在手机上查看测试vue-cli构建的项目
如何在手机上查看测试vue-cli构建的项目
28 0
|
3月前
|
前端开发 JavaScript API
手机上看前端-vue-react项目效果
手机上看前端-vue-react项目效果
35 0
uniapp手机号授权登录-现在只能通过手机号授权登录,后台来获取用户信息了效果demo(整理)
uniapp手机号授权登录-现在只能通过手机号授权登录,后台来获取用户信息了效果demo(整理)