`
阅读更多
  最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式。当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些。
要实现扫码登录我们需要解决两个问题:
1. 在没有输入用户名及密码的情况下,如何解决权限安全问题?换句话讲,如何让服务器知道扫码二维码的客户端是一个合法的用户?
2. 服务器根据用户在客户端的选择如何实时在网页上作出相应的响应?
  首先我们先理一下微信的实现思路,来方便我们理解解决这一难题的思路方向。微信登录的二维码实际上是将一个URL转换成二维码的形式,而通过微信客户端扫码后,无非就是打开了这个url, 我捕捉到的微信二维码的url为https://login.weixin.qq.com/l/YdmTu30I5A== ,这个url里的YdmTu30I5A==代表的是本次会话的唯一ID, 这个有点儿类似浏览器里的session id,通过这个ID,微信就能定向将确认结果反馈到网页上。使用微信二维码登录功能,需要有两个前提:一是客户端上需要安装微信app。 二是用户需要登录到到微信app。https://wx.qq.com/


  为什么要有这两个条件呢?那是因为微信在确认是否允许登录到网页版的时候,微信需要提取当前app的登录信息并将上面的session ID一并发给服务器,这样服务器收到了登录信息和sessionID后就可以确认两件事:一是用来确认登录的客户端的用户是验证过的;二是通过session ID服务器知道将反馈结果推送到哪个网页。
  所以针对第一点,我们的关键在于,在扫描前要确保用户是已经被验证过且合法的用户(验证方式可以是用户名+密码,也可以是一个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,大家可以去看看效果:http://goeasy.io/www/demo/qrcodelogin
  希望对大家有帮助,如有理解错误的地方,还请大家斧正。
  • 大小: 32.9 KB
分享到:
评论

相关推荐

    java实现扫码登陆

    总的来说,Java实现扫码登录是一个涉及多方面技术的综合应用,包括二维码生成、服务器端验证、会话管理、前端与后端的交互以及安全性考量。通过合理的设计和实现,可以为用户提供便捷且安全的登录体验。

    java实现手机扫描二维码后网站跳转新页面

    总结来说,无论是使用ZXing还是Hutools,Java都可以方便地生成二维码并验证其内容,实现手机扫描后跳转到指定网页的功能。开发者可以根据项目需求和对库的熟悉程度选择合适的方法。在实际应用中,为了增强用户体验,...

    java实现电脑端扫描二维码

    在Java中实现电脑端扫描二维码的过程涉及到多个步骤,包括前端的图像捕获、后端的图像处理和解码。以下是对这些步骤的详细说明: 1. **前端图像捕获**: - 前端使用JavaScript来调用电脑摄像头进行拍照。这通常...

    扫描二维码下载 JAVA实现20190403

    本文将深入探讨如何使用JAVA实现扫描二维码自动下载对应客户端类型的APP功能。 首先,我们需要理解二维码的基本原理。二维码(Quick Response Code)是一种二维条形码,存储的数据可以是网址、文字、图片、联系人...

    java实现条形码二维码生成含文字标签信息

    本篇将深入探讨如何使用Java结合ZXing库来生成包含文字标签信息的条形码和二维码。 ZXing,全称为“Zebra Crossing”,是一个开源的、跨平台的条码读取和生成项目。它支持多种条码格式,包括一维条形码(如EAN-13、...

    SpringBoot 实现扫码登录

    PC端监听二维码session状态接口,目前定义状态:0 二维码生成成功 ,1 手机端扫码成功 2手机端确认登录 -1 sessionId过期失效 二维码扫描通知,手机端扫描成功会调用此接口,发送session通知 手机端确认通知,手机端...

    javaweb实现app扫码登录功能

    Java Web 实现 APP 扫码登录功能 Java Web 实现 APP 扫码...Java Web 实现 APP 扫码登录功能需要经过生成二维码、APP 扫描、Web 页面轮询、服务器端验证等几个步骤。该功能可以极大地提高用户体验,提高系统的安全性。

    java实现二维码扫码授权登陆

    Java 实现二维码扫码授权登录 Java 实现二维码扫码授权登录是指使用 Java 语言实现的二维码扫描授权登录功能,该功能主要用于设备之间的授权登录。下面将详细介绍 Java 实现二维码扫码授权登录的知识点: 一、生成...

    详解java实现简单扫码登录功能(模仿微信网页版扫码)

    本文将详细介绍 Java 实现简单扫码登录功能的实现过程,包括生成二维码、循环请求服务端、判断是否被扫、超时失效功能、登录成功后产生 sessionId 传到页面使用 js 保存 cookie 等步骤。 生成二维码 在生成二维码...

    java usb扫码枪数据

    Java USB扫码枪数据的处理是将物理设备与Java应用程序相结合,实现数据的自动读取和解析。在这个项目中,我们有一个名为"ReadCodeWeb"的DEMO,它是一个基于WEB的应用,专门设计用来配合外置的扫码枪进行二维码或条形...

    Java基于动态生成二维码的学生签到系统源码+项目使用说明+sql数据库.zip

    Java基于动态生成二维码的学生签到系统源码+项目...如部署错误会导致无法扫码,扫码不成功等问题) 二维码刷新频率设置 1、在static/js/signinBoard.js中 设置refreshTime 刷新时间 2、在application.properties文件

    java 对接扫码枪 工具类

    本篇文章将详细讲解如何在Java中创建一个工具类来实现扫码枪的对接。 首先,我们需要理解扫码枪的工作原理。大多数扫码枪在物理层面表现为一个键盘设备,它们会模拟键盘输入,当扫描到条形码时,会按照特定格式将...

    扫码下载app代码说明(java,web)

    这里的"扫码下载app代码说明(java,web)"指的是使用Java和Web技术实现这一功能的代码实践。下面我们将深入探讨这个话题。 首先,我们需要了解扫码下载的基本流程: 1. **生成二维码**:服务器端根据Android和iOS...

    JAVA整合HTML5实现扫描二维码功能项目源码

    项目使用环境以及工具: Eclipse,JDK1.7,struts2,HTML5,Jquery,QRCode HTML5技术支持WebApp在手机上拍照,显示在页面上并上传到...这是手机微博应用中常见的功能,当然你也可以在其它类型应用中适当使用此技术。

    java摄像头读取二维码(整个java项目)

    Java摄像头读取二维码是一项在物联网和移动应用中常见的技术,它允许通过摄像头捕获图像,然后解析其中的二维码信息。本项目提供了一个完整的Java解决方案,包括了必要的代码和配置,以便开发者可以快速理解和实现...

    java后台获取扫码枪数据.7z

    在Windows平台上,使用Java进行后台开发时,与扫码枪交互是一项常见的需求。扫码枪作为一种便捷的数据输入设备,能够快速读取商品条形码或二维码信息,并将其转化为可处理的文本数据。本文将深入探讨如何在Java后台...

    java扫码枪

    Java扫码枪技术是Java在物联网(IoT)和Web应用领域中的一个重要应用,它使得用户可以通过扫码枪设备读取条形码或二维码中的数据,并将其集成到应用程序中进行处理。本DEMO项目展示了如何在Web环境中实现这一功能,...

    扫码枪扫码Java程序.zip

    java程序编写获取扫码枪扫码程序,并将扫码枪扫码有数据库MySQL数据进行对比预警,解决相关行业使用扫码枪进行出货重复使用相关商品码问题。该程序连接MySQL数据库,可同时部署到多台机器上进行设备比对。底层也实现...

    Java实现支付宝扫码支付完整过程(沙箱测试环境)及其项目源码

    Java实现支付宝扫码支付完整过程(沙箱测试环境)及其项目源码 项目描述 最近想开发一个关于支付网页的小项目,记录一下自己碰到的坑,这里我是通过Java在支付宝测试环境里面实现支付宝支付完整过程。 运行环境 ...

Global site tag (gtag.js) - Google Analytics