广告位联系
返回顶部
分享到

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

java 来源:互联网搜集 作者:秩名 发布时间:2019-07-11 13:19:41 人浏览
摘要

本篇文章介绍javaweb项目如何实现手机短信登录 一、首先需要注册个第三方的账户,比如秒嘀科技等,然后拿到三个参数值:QUERAY_PATH ACCOUNT_SIDAUTH_TOKEN 二、编写获取验证码类getMessage.java private static final String QUERAY_PATH=xxxx; private sta

本篇文章介绍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+"×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实现的。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/weixin_38008100/article/details/81570392
相关文章
  • SpringBoot自定义错误处理逻辑介绍

    SpringBoot自定义错误处理逻辑介绍
    1. 自定义错误页面 将自定义错误页面放在 templates 的 error 文件夹下,SpringBoot 精确匹配错误信息,使用 4xx.html 或者 5xx.html 页面可以打印错误
  • Java实现手写一个线程池的代码

    Java实现手写一个线程池的代码
    线程池技术想必大家都不陌生把,相信在平时的工作中没有少用,而且这也是面试频率非常高的一个知识点,那么大家知道它的实现原理和
  • Java实现断点续传功能的代码

    Java实现断点续传功能的代码
    题目实现:网络资源的断点续传功能。 二、解题思路 获取要下载的资源网址 显示网络资源的大小 上次读取到的字节位置以及未读取的字节
  • 你可知HashMap为什么是线程不安全的
    HashMap 的线程不安全 HashMap 的线程不安全主要体现在下面两个方面 在 jdk 1.7 中,当并发执行扩容操作时会造成环形链和数据丢失的情况 在
  • ArrayList的动态扩容机制的介绍

    ArrayList的动态扩容机制的介绍
    对于 ArrayList 的动态扩容机制想必大家都听说过,之前的文章中也谈到过,不过由于时间久远,早已忘却。 所以利用这篇文章做做笔记,加
  • JVM基础之字节码的增强技术介绍

    JVM基础之字节码的增强技术介绍
    字节码增强技术 在上文中,着重介绍了字节码的结构,这为我们了解字节码增强技术的实现打下了基础。字节码增强技术就是一类对现有字
  • Java中的字节码增强技术

    Java中的字节码增强技术
    1.字节码增强技术 字节码增强技术就是一类对现有字节码进行修改或者动态生成全新字节码文件的技术。 参考地址 2.常见技术 技术分类 类
  • Redis BloomFilter布隆过滤器原理与实现

    Redis BloomFilter布隆过滤器原理与实现
    Bloom Filter 概念 布隆过滤器(英语:Bloom Filter)是1970年由一个叫布隆的小伙子提出的。它实际上是一个很长的二进制向量和一系列随机映射
  • Java C++算法题解leetcode801使序列递增的最小交换次

    Java C++算法题解leetcode801使序列递增的最小交换次
    题目要求 思路:状态机DP 实现一:状态机 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 class Solution { public int minSwap(int[] nums1, int[] nums2) { int n
  • Mybatis结果集映射与生命周期介绍

    Mybatis结果集映射与生命周期介绍
    一、ResultMap结果集映射 1、设计思想 对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了 2、resultMap的应用场
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计