SSM仿微信扫码登录

SSM仿微信扫码登录

这里写图片描述

验证码状态
初始化时状态为0,
1、将图片以uuid命名和状态以键值对存到缓存中,
2、页面以轮询访问服务器,如超时返回状态-3
3、手机扫码时,状态改为1,
4、手机确认登录,状态改为2;手机取消登录,状态改为-2
5、状态为2时,延迟1秒跳转到首页实现扫码登录过程

 微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等。

  1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数;
  2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
  3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

源码分析

Map<String, Object> map = new HashMap<String, Object>();
        long begin = System.currentTimeMillis();
        while(true){
            long curr = System.currentTimeMillis();
            if( curr - begin > 60 *1000){                           //1分钟超时
                LoginCodeUtil.remove(uuid);
                map.put("state", -3);
                System.out.println("二维码验证超时。。。");
                break;
            }
            int state = LoginCodeUtil.get(uuid);
            if( state == -3){
                map.put("state", -3);
                break;
            }
            else if( state == 1){
                map.put("state", 1);
                map.put("msg", "二维码正在扫码。。。");
                LoginCodeUtil.set(uuid, -1);
                break;
            }
            else if( state == 2){
                map.put("state", 2);
                map.put("msg", "扫描完成");
                LoginCodeUtil.remove(uuid);
                break;
            }
            else if( state == -2){
                map.put("state", -2);
                map.put("msg", "取消登录");
                LoginCodeUtil.remove(uuid);
                break;
            }
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {}
        }
        return map;

1、采用轮询机制
2、为了方面查看,我们这里写了硬编码,实际开发不允许
3、状态已在上面介绍过
4、break是结束整个循环体,continue是结束单次循环`

源码下载
注意:需要本文资源可关注微信号艳辉网 回复关键字‘java155’获取。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/sinat_15153911/article/details/80215163