博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信小程序 手机号-验证码登录接口
阅读量:4156 次
发布时间:2019-05-25

本文共 6611 字,大约阅读时间需要 22 分钟。

记录下。

package com.fh.controller.app.other;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import com.fh.controller.base.BaseController;import com.fh.service.aist.member.impl.AistMemberInfoServiceImpl;import com.fh.util.PageData;import com.fh.util.Ret;import com.fh.util.Sms;import com.fh.util.Tools;import com.fh.util.jwt.JWTUtils;@Controller@RequestMapping(value = "/app")public class LoginController extends BaseController {    private static final Logger LOGGER = LoggerFactory.getLogger(LoginController.class);    @Resource(name = "aistMemberInfoServiceImpl")    private AistMemberInfoServiceImpl aistMemberInfoServiceImpl;    /**     * 小程序登录接口     *     */    @ResponseBody    @RequestMapping(value = "/login")    public Object login(HttpServletRequest request, @RequestParam(value = "phone") String phone,        @RequestParam(value = "code") String code) {        if (!Tools.isPhoneRight(phone)) {            return Ret.fail("手机号格式错误").build();        }        if (!Sms.isCorrectCode(code, phone, request)) {            return Ret.fail("手机验证码错误").build();        }        try {            PageData pd = new PageData();            pd.put("phone", phone);            PageData memberInfo = aistMemberInfoServiceImpl.findByParam(pd);            if (memberInfo != null) {                LOGGER.info("登录成功,id:", pd.get("id"));                return Ret.ok("登录成功")                    .put(JWTUtils.getXAccessToken(), JWTUtils.createToken(String.valueOf(pd.get("id")))).build();            }            /*PageData newMemberInfo = new PageData();            newMemberInfo.put("id", value);            newMemberInfo.put("status", value);            newMemberInfo.put("type", value);            newMemberInfo.put("id", value);            aistMemberInfoServiceImpl.save(newMemberInfo);            LOGGER.info("注册并登录成功,id:", newMemberInfo.get("id"));            return Ret.ok("登录成功").put(JWTUtils.getXAccessToken(), JWTUtils.createToken(String.valueOf(pd.get("id"))))                .build();*/            LOGGER.info("登录失败,库中未存在该手机号账户");            return Ret.fail("登录失败,库中未存在该手机号账户").build();        } catch (Exception e) {            e.printStackTrace();            LOGGER.error("登录失败", e);            return Ret.fail("登录失败").build();        }    }    /**     * 小程序登录接口     *     */    @ResponseBody    @RequestMapping(value = "/getSmsCode")    public Ret getSmsCode(String phone) {        if (!Tools.isPhoneRight(phone)) {            return (Ret.fail("手机号格式错误").build());        }        String token = Sms.sendSms(phone);        if (token != null) {            return Ret.ok("成功发送验证码").put(JWTUtils.getX3RedsessionToken(), token).build();        } else {            return Ret.fail("同一手机号验证码短信发送超出5条").build();        }    }}

发送和判断验证码 接口

package com.fh.util;import io.jsonwebtoken.Claims;import javax.servlet.http.HttpServletRequest;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.NameValuePair;import org.apache.commons.httpclient.methods.PostMethod;import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import com.fh.util.jwt.JWTUtils;/** * -短信验证码 *  * @author Xie Licheng * @date 2019年8月14日 */public class Sms {    private static final Logger LOGGER = LoggerFactory.getLogger(Sms.class);    private static final String POST_URL = "***************";    private static final String ACCOUNT = "***********";    private static final String PASSWORD = "****************";    public static String sendSms(String phone) {        HttpClient client = new HttpClient();        PostMethod method = new PostMethod(POST_URL);        client.getParams().setContentCharset("GBK");        method.setRequestHeader("ContentType", "application/x-www-form-urlencoded;charset=GBK");        String mobile_code = String.valueOf(Tools.getRandomNum());        String content = "您的验证码是:" + mobile_code + "。请不要把验证码泄露给其他人。";        NameValuePair[] data =            {new NameValuePair("account", ACCOUNT), new NameValuePair("password", PASSWORD),                new NameValuePair("mobile", phone), new NameValuePair("content", content),};        method.setRequestBody(data);        try {            client.executeMethod(method);            String SubmitResult = method.getResponseBodyAsString();            Document doc = DocumentHelper.parseText(SubmitResult);            Element root = doc.getRootElement();            String code = root.elementText("code");            if ("2".equals(code)) {                return JWTUtils.createToken(phone + "," + mobile_code);            }            return null;        } catch (Exception e) {            LOGGER.error("验证码发送出错", e);            return null;        }    }    public static boolean isCorrectCode(String code, String phone, HttpServletRequest request) {        Claims resultClaims = JWTUtils.parse3rdSessionJwtClaims(request);        String codeToken = resultClaims.getId();        if (Tools.isEmpty(codeToken)) {            return false;        }        String[] codeTokenArray = codeToken.split(",");        if (codeTokenArray.length != 2) {            return false;        }        if (!phone.equals(codeTokenArray[0]) || !code.equals(codeTokenArray[1])) {            return false;        }        return true;    }}

其他功能方法

public static boolean isPhoneRight(String phone) {        try {            return !(phone == null || "".equals(phone) || phone.length() != 11 || !Pattern.matches("^((1)\\d{10})$",                phone));        } catch (Exception e) {            return false;        }    } public static String createToken(String userId) {        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;        long nowMillis = System.currentTimeMillis();        Date nowDate = new Date(nowMillis);        long expiredMillis = nowMillis + EXPIRED_TTLMILLIS;        Date expDate = new Date(expiredMillis);        byte[] apiKeySecretBytes = DatatypeConverter.parseBase64Binary(SECRET_KEY);        Key singingKey = new SecretKeySpec(apiKeySecretBytes, signatureAlgorithm.getJcaName());        JwtBuilder builder =            Jwts.builder().setId(userId).setIssuedAt(nowDate).setSubject(SUBJECT).setIssuer(ISSUER)                .setExpiration(expDate).signWith(signatureAlgorithm, singingKey);        return builder.compact();    }

 

转载地址:http://umwxi.baihongyu.com/

你可能感兴趣的文章
程序员过年回家该怎么给亲戚朋友解释自己的职业?
查看>>
技术架构师的日常工作是什么?网友:搭框架,写公共方法?
查看>>
第四章 微信飞机大战
查看>>
九度:题目1008:最短路径问题
查看>>
九度Online Judge
查看>>
九度:题目1027:欧拉回路
查看>>
九度:题目1012:畅通工程
查看>>
九度:题目1017:还是畅通工程
查看>>
九度:题目1034:寻找大富翁
查看>>
第六章 背包问题——01背包
查看>>
51nod 分类
查看>>
1136 . 欧拉函数
查看>>
面试题:强制类型转换
查看>>
Decorator模式
查看>>
Template模式
查看>>
Observer模式
查看>>
高性能服务器设计
查看>>
性能扩展问题要趁早
查看>>
MySQL-数据库、数据表结构操作(SQL)
查看>>
OpenLDAP for Windows 安装手册(2.4.26版)
查看>>