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
版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章
|
3月前
|
存储 JSON JavaScript
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-1
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
65 0
|
5月前
|
Java 关系型数据库 MySQL
基于SSM的手机商城管理系统(有报告)。Javaee项目。
基于SSM的手机商城管理系统(有报告)。Javaee项目。
|
4月前
|
XML Java Android开发
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
78 0
|
5月前
|
JSON 前端开发 安全
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-2
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
40 0
|
1月前
|
安全 Linux 网络安全
购了轻服务器,手机登录服务器用root和administrator做登录名,都提示别名已存在,请修改
【2月更文挑战第16天】购了轻服务器,手机登录服务器用root和administrator做登录名,都提示别名已存在,请修改
13 1
|
2月前
|
安全 Linux 网络安全
手机登录服务器用root和administrator做登录名,都提示别名已存在
【2月更文挑战第5天】手机登录服务器用root和administrator做登录名,都提示别名已存在
30 8
|
3月前
|
JSON 前端开发 安全
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-2
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
55 0
|
4月前
|
XML Java Android开发
Android App开发实战项目之仿手机QQ动感影集动画播放(附源码和演示视频 可直接使用)
Android App开发实战项目之仿手机QQ动感影集动画播放(附源码和演示视频 可直接使用)
29 0
|
4月前
|
缓存 BI
咨询下,阿里云云效ram账号绑定钉钉账号后,手机端看项目,是空的,怎么解决?
咨询下,阿里云云效ram账号绑定钉钉账号后,手机端看项目,是空的,怎么解决?
45 2
|
5月前
|
开发工具
uniapp项目怎么连接手机调试
uniapp项目怎么连接手机调试
67 0

热门文章

最新文章