最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式。当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些。
要实现扫码登录我们需要解决两个问题:
1.  在没有输入用户名及密码的情况下,如何解决权限安全问题?换句话讲,如何让服务器知道扫码二维码的客户端是一个合法的用户?
2.  服务器根据用户在客户端的选择如何实时在网页上作出相应的响应?

首先我们先理一下微信的实现思路,来方便我们理解解决这一难题的思路方向。微信登录的二维码实际上是将一个URL转换成二维码的形式,而通过微信客户端扫码后,无非就是打开了这个url, 我捕捉到的微信二维码的url为https://login.weixin.qq.com/l/YdmTu30I5A== ,这个url里的YdmTu30I5A==代表的是本次会话的唯一ID, 这个有点儿类似浏览器里的session id,通过这个ID,微信就能定向将确认结果反馈到网页上。使用微信二维码登录功能,需要有两个前提:一是客户端上需要安装微信app。二是用户需要登录到到微信app。https://wx.qq.com/

 JAVA Web实时消息后台服务器推送技术

 

为什么要有这两个条件呢?那是因为微信在确认是否允许登录到网页版的时候,微信需要提取当前app的登录信息并将上面的session ID一并发给服务器,这样服务器收到了登录信息和sessionID后就可以确认两件事:一是用来确认登录的客户端的用户是验证过的;二是通过sessionID服务器知道将反馈结果推送到哪个网页。

所以针对第一点,我们的关键在于,在扫描前要确保用户是已经被验证过且合法的用户(验证方式可以是用户名+密码,也可以是一个secure key),在选择是否登录时将这个结果一并推送到服务器端,就好了。如果用户没有验证是否合法,可以像微信的处理方式一样直接告诉用户二维码不可识别或提示请先登录到app。

有了身份验证,那么现在就解决第二个问题,如何将反馈结果实时地显示在网页上呢?有朋友可能会说,客户端这边很简单发一个请求到后台就好了,而网页上用ajax定时发送到服务器端看是否有反馈。我不赞成这种做法,因为ajax轮询方式十分消耗客户端和服务器端资源!这里涉及到另一个技术-web实时推送技术,使用推送技术可以节约服务器端和客户端的资源,可以稳定地推送和接收任何消息。我在实现的过程中我采用了第三方推送服务-GoEasy推送,用它是实现非常简单,我们项目里的其他功能也用到了GoEasy web实时推送服务,所以在此我直接就用的GoEasy推送来将登录反馈结果推送到服务器。我的实现步骤非常简单,将传送的session ID作为客户端与网页端的通信channel,网页端订阅用session ID作为值得channel,客户端将验证结果和session ID发送到服务器端,服务器端可以通过这个channel主动将结果推送给网页版!如果客户端也需要做相应的反馈的话,那么客户端也只需要订阅这个channel,然后服务器端会同时将结果推送给网页版和客户端,收到消息后,就可以根据需求在goeasy的回调函数里做你想做的事情了。关于goeasy推送的使用,大家可以参考这篇博客: http://www.cnblogs.com/jishaochengduo/articles/5552645.html,另外GoEasy推送官网上也有一个demo:GoEasy二维码扫码登录demo,大家可以去看看效果.

希望对大家有帮助,如有理解错误的地方,还请大家斧正。

转载于:https://blog.51cto.com/12271279/1871791

JAVA 实现扫码二维码登录相关推荐

  1. C(++) Websocket实现扫码二维码登录---GoEasy

    最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式.当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些. 要实现扫码登录我们需要 ...

  2. node.js 实现扫码二维码登录

    最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式.当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些. 要实现扫码登录我们需要 ...

  3. python wxpy登录微信,扫完二维码后,打开的软件没有关闭/ 扫二维码时不小心关闭了软件,程序会卡住不动的处理方法

    加了几行代码,扫完二维码后,把打开图片的软件也结束程序 圈起来的代码是我改动后的!! 先找到login.py 追踪到打开图片的函数: 扫描结束后的函数: 这样的话,登录微信过程中,一旦发现显示二维码的 ...

  4. java根据内容生成二维码

    java根据内容生成二维码 一.首先导入jar包:google.zxing.jar jar包可以从maven网站下载:meven仓库 这里可以找到你想要的绝大多数jar包,可以是依赖,也可以是jar包 ...

  5. android扫码二维码识别二维码

    1. 快速集成扫码二维码,识别二维码功能.经过加工处理优化的,直接返回扫码结果字符串和图片的bitmap数据. 直接上代码: package com.xinxinchelian.myscanzxing ...

  6. 用STM32实现:摄像头扫到二维码后提取二维码中的信息分别放到数组中

    摄像头扫到二维码后提取二维码中的信息分别放到数组中 把想要的信息编辑好放到二维码中(网上有好多在线生成二维码的工具) /** *作者:魏波 *时间:2017.6.6 * **/char name[6] ...

  7. Java:Java编程实现导出二维码

    Java:Java编程实现导出二维码 目录 输出结果 代码设计 输出结果 更新-- 代码设计 public class QRCodeUtil {private static final String ...

  8. Java连接打印机打印二维码

    首先导入依赖 implementation 'com.google.zxing:core:3.5.1' implementation 'com.google.zxing:javase:3.5.1' 1 ...

  9. java利用zxing生成二维码

    什么是ZXing? ZXing是一个开源的,用Java实现的多种格式的1D/2D条码图像处理库. 利用ZXing这个工具库来生成二维码,具体操作如下: 引入相关资源包 <dependency&g ...

最新文章

  1. MAT之ELM:ELM实现鸢尾花(iris数据集)种类测试集预测识别正确率(better)结果对比
  2. “天昌”的挽歌——逝去的背影(一)
  3. 树莓派智能家居-语音聊天机器人实现
  4. NG Ng-template(模板元素)
  5. C语言printf函数详解和示例
  6. jedis默认切片实现及对应python版本实现
  7. android pcm数据格式,android 实时PCM数据编码成AAC
  8. 计算机windows实验原理,Windows上机实验报告
  9. PTA|团体程序设计天梯赛-练习集|JAVA版
  10. java date 默认值_Java程序将java.util.Date转换为ZonedDateTime
  11. MDK(Keil) 自动生成bin文件、汇编文件或者HEX文件、ASM文件
  12. 学习之苦也正是学习之甜------知识的本质
  13. Extended VINS-Mono: 大规模户外环境进行绝对和相对车辆定位的系统性方法(IROS2021)...
  14. 基于STM32F103+涂鸦三明治的宠物自动喂食器
  15. Word第n页显示第一页的页码
  16. GeoServer中的WPS服务-概念
  17. 绿荫工作室爱选修app内测
  18. java生成不可修改的pdf_好記性不如爛筆頭4-JAVA生成PDF文件
  19. git小乌龟解决代码冲突
  20. c语言程序打不开如何修复,处理win7中打不开程序修复0xc0000142错误代码的问题

热门文章

  1. 令人机双双崩溃的VS2008 SP1!WPF用户请勿更新!
  2. java书籍_这本最适合夯实基础的Java 书籍,80% 的 Java 程序员没认真看过
  3. 剑指offer 算法(栈和队列 查找和排序)
  4. Oracle DBlink相关
  5. 小白袍 -- Chapter 1 Java中的Encode与Decode
  6. CentOS 安装与优化
  7. Java String,StringBuilder和StringBuffer的区别 StringBuilder StringBuffer String
  8. Android图形子系统
  9. 带FIFO的UART收发器设计(转发)
  10. 学习.NET的两个网站:MSDN和Asp .NET