APP知识|微信扫码登录如何实现( 二 )


  •            Log4jUtil.CommonLog.error("pc生成二维码登录", e);

  •        }        return "index";

  •    }//判断二维码是否被扫描public void pool() {

  •        DataResultInfo result = null;

  •        System.out.println("检测[   " + uuid + "   ]是否登录");

  •        ScanPool pool = null;

  •        if(MapUtils.isNotEmpty(PoolCache.cacheMap)) pool = PoolCache.cacheMap.get(uuid);        try {            if (pool == null) {                // 扫码超时,进线程休眠

  •                result = DataResultInfo.getInstance().failure();

  •                result.setSuccessFlag(CommonConstant.Zero);

  •                result.setExtension(CommonConstant.Zero, "该二维码已经失效,请重新获取");

  •                Thread.sleep(10 * 1000L);

  •            } else {                // 使用计时器, 固定时间后不再等待扫描结果--防止页面访问超时

  •                new Thread(new ScanCounter(uuid, pool)).start();                boolean scanFlag = pool.getScanStatus(); //这里得到的ScanPool(时间靠前)和用户使用手机扫码后得到的不是一个,用户扫码后又重新更新了ScanPool对象,并重新放入了redis中,,所以这里要等待上面的计时器走完,才能获得最新的ScanPool

  •                if (scanFlag) {

  •                    result = DataResultInfo.getSuccess();                    // 根据uuid从redis中获取pool对象,得到对应的sessionId,返给页面,通过js存cookie中

  •                    JSONObject jsonObj = new JSONObject();

  •                    jsonObj.put("cname", CookieConstant.SESSION_KEY);

  •                    jsonObj.put("cvalue", pool.getSession());

  •                    result.setData(jsonObj);

  •                } else {

  •                    result = DataResultInfo.getInstance().failure();

  •                    result.setMessage("等待扫描");

  •                }

  •            }

  •        } catch (Exception e) {

  •            e.printStackTrace();

  •        }

  •        sendJsonMessage(result);

  •    }//手机扫码接口(以id和token作为用户身份登录)

  • public String phoneScanLogin() {

  •        DataResultInfo result = null;

  •         ScanPool pool = null;

  •         if(MapUtils.isNotEmpty(PoolCache.cacheMap)) pool = PoolCache.cacheMap.get(uuid);        try {            if (pool == null) {

  •                result = DataResultInfo.getInstance().failure();

    推荐阅读