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

相关文章
|
6月前
|
JavaScript Java 测试技术
Java项目基于ssm+vue.js的网上手机销售系统附带文章和源代码设计说明文档ppt
Java项目基于ssm+vue.js的网上手机销售系统附带文章和源代码设计说明文档ppt
65 0
|
14天前
Discuz! X3.5插件云诺-阿里云短信手机登录 会员登录后也无法查看附件图片的问题解决方法
Discuz! X3.5插件云诺-阿里云短信手机登录 会员登录后也无法查看附件图片的问题解决方法
33 2
|
23天前
|
SQL 存储 数据可视化
手机短信SQL分析技巧与方法
在手机短信应用中,SQL分析扮演着至关重要的角色
|
5月前
|
存储 小程序 前端开发
【微信小程序 - 工作实战分享】1.微信小程序发送手机短信验证码(阿里云)
【微信小程序 - 工作实战分享】1.微信小程序发送手机短信验证码(阿里云)
427 0
|
3月前
|
小程序 安全 Java
|
3月前
|
存储 监控 开发工具
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
Django 后端架构开发:手机与邮箱验证码接入、腾讯云短信SDK和网易邮箱
60 0
|
3月前
【Azure 环境】中国区Azure B2C 是否支持手机验证码登录呢?
【Azure 环境】中国区Azure B2C 是否支持手机验证码登录呢?
|
4月前
|
缓存 开发框架 前端开发
循序渐进VUE+Element 前端应用开发(32)--- 手机短信动态码登陆处理
循序渐进VUE+Element 前端应用开发(32)--- 手机短信动态码登陆处理
|
5月前
|
存储 缓存
使用tp5内cache缓存,存储手机短信验证码
使用tp5内cache缓存,存储手机短信验证码
112 1
|
5月前
|
JavaScript 网络架构
如何在手机上预览vue项目
如何在手机上预览vue项目