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

假设现在有2个设备,A设备需要扫码授权登陆,B设备是已经登陆了的设备。然后实现如下:

一、A设备生成生成二维码:

A设备向服务器请求getLoginCode接口,这个接口根据请求的sessionId进行base64或其他加密方式进行加密,然后以此作为二维码的值,并将这个loginCode写到redis里,设置5分钟过期。然后将这个loginCode返回给A设备,A设备以此值来生成登陆的二维码。

二、B设备扫码授权

B设备来扫A设备的二维码的时候,携带二维码的值,请求授权登陆的接口scanConfirmLogin,此接口里先校验二维码是否过期,没过期的话进行后面的业务逻辑处理,将用户的基本信息和token写到redis里。

三、A设备轮询获取授权状态

B设备以每秒一次的频率来刷 获取用户授权状态接口,若状态为已授权,拿到用户信息去做后面的逻辑处理。

 /**
 * 获取扫描登陆的二维码
 * @param noncestr随机字符串
 * @throws Exception
 */
 @RequestMapping(value = "user/getLoginCode.json")
 public void getLoginCode(String noncestr,HttpServletRequest request,HttpServletResponse response) throws Exception {
 if(StringUtil.isBlank(noncestr)){
 apiData(request, response,ReqJson.error(CommonError.PARAMS_IMPERFECT));
 return;
 }
 //参数的有效性校验在拦截器里实现
 int expirationTime=300; //时效5分钟
 final String sessionId=request.getSession().getId();
 String loginCode=ToolUtils.getBase64(sessionId);
 JedisUtil.set(loginCode, loginCode, expirationTime);
 Map<String,Object> map=new HashMap<>();
 map.put("loginCode", loginCode);
 map.put("expirationTime", expirationTime);
 apiData(request, response, ReqJson.ok(map));
 }
 /**
 * 扫码确认登陆
 * @param loginCode
 * @param request
 * @param response
 * @throws Exception
 */
 @RequestMapping(value = "user/scanConfirmLogin.json")
 @AuthorizationApi
 public void scanConfirmLogin(@CurrentToken final Token token,String loginCode,HttpServletRequest request,HttpServletResponse response) throws Exception {
 if(StringUtil.isBlank(loginCode)){
 apiData(request, response,ReqJson.error(CommonError.PARAMS_IMPERFECT));
 return;
 }
 String userId=token.getUserId();
 Map<String,String> map=new HashMap<>();
 String loginTicket=JedisUtil.get(loginCode);
 if(StringUtil.isBlank(loginTicket)){
 //二维码过期
 apiData(request, response,ReqJson.error(CommonError.TWO_DIMENSIONAL_CODE_HAS_EXPIRED));
 return;
 }
 UserInfo userInfo = userInfoBiz.getUser(new UserInfo(userId));
 if(userInfo==null){
 apiData(request, response,ReqJson.error(UserError.USER_NOT_FOUND));
 return;
 }
 //将用户信息放在缓存中
 map.put(BaseConfig.ACCESS_TOKEN, token.getAccessToken());
 map.put("userId", userInfo.getUserId());
 map.put("rongCloudToken", userInfo.getRongCloudToken());
 map.put("identity", userInfo.getIdentity());
 JedisUtil.setMap(loginCode+"scanConfirmLogin", map, 300);
 apiData(request, response, ReqJson.ok(new Object()));
 }
 /**
 * 获取登陆状态
 * @param loginCode
 * @param request
 * @param response
 * @throws Exception
 */
 @RequestMapping(value = "user/getScanConfirmLoginStatus.json")
 public void getLoginStatus(final String loginCode,HttpServletRequest request,HttpServletResponse response) throws Exception {
 if(StringUtil.isBlank(loginCode)){
 apiData(request, response,ReqJson.error(CommonError.PARAMS_IMPERFECT));
 return;
 }
 Map<String,String> map= JedisUtil.getMap(loginCode+"scanConfirmLogin");
 if(map==null){
 apiData(request, response,ReqJson.error(CommonError.AUTHORIZATION_HAS_EXPIRED));
 return;
 }
 apiData(request, response, ReqJson.ok(map));
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java二维码登录流程实现代码(包含短地址生成,含部分代码)

    近年来,二维码的使用越来越风生水起,笔者最近手头也遇到了一个需要使用二维码扫码登录网站的活,所以研究了一下这一套机制,并用代码实现了整个流程,接下来就和大家聊聊二维码登录及的那些事儿. 二维码原理 二维码是微信搞起来的,当年微信扫码二维码登录网页微信的时候,感觉很神奇,然而,我们了解了它的原理,也就没那么神奇了.二维码实际上就是通过黑白的点阵包含了一个url请求信息.端上扫码,请求url,做对应的操作. 一般性扫码操作的原理 微信登录.支付宝扫码支付都是这个原理: 1. 请求二维码 桌面端向服务

  • java微信扫描公众号二维码实现登陆功能

    本文实例为大家分享了java微信扫描公众号二维码实现登陆的具体代码,供大家参考,具体内容如下 前提条件: 1.微信公众平台为服务号, 2.服务号实现了账号绑定功能,即将open_id 与业务系统中的用户名有对应关系 具体实现原理: 1.用户访问业务系统登陆页时,调用二维码接口,获得二维码的ticketid,同时将sessionid,ticketid和二维码的seceneid保存 2.返回登陆页时,根据ticketid获得微信二维码 3.页面通过ajax发送请求,判断是否已经扫描成功. 4.公众平

  • java生成二维码并且给二维码添加logo

    java生成二维码,具体代码如下所示: package com.bus.wx.action.code; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import jav

  • Android 超简易Zxing框架 生成二维码+扫码功能

    zxing是一个二维码的框架. 配置 1. implementation 'com.journeyapps:zxing-android-embedded:4.1.0' 如果报错在这个文件的android下加上如下配置,让其支持Java1.8,不然只有1.7.1.6 (可在'app'右键---->open module settings------>Module看到) compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 tar

  • 利用java生成二维码工具类示例代码

    二维码介绍 二维条形码最早发明于日本,它是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的,在代码编制上巧妙地利用构成计算机内部逻辑基础的"0"."1"比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理. 如下为java生成二维码工具类,可以选择生成文件,或者直接在页面生成,话不多说了,来一起看看详细的示例代码吧. 示例代码 import java.aw

  • Java生成二维码可添加logo和文字功能

    废话不多说,直接给大家贴代码了,具体代码如下所示: package com.luo.wctweb.util; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.util.Date; imp

  • python实现二维码扫码自动登录淘宝

    一个小项目自动登录淘宝联盟抓取数据,由于之前在Github上看过类似用Python写的代码因此选择用Python来写,第一次用Python正式写程序还是被其"简单"所震撼,当然用的时候还是对其(2.7版)编码.迁移环境等问题所困扰,还好后来都解决了. 言归正传,抓取淘宝联盟的数据首先要解决的就是登录的问题,之前一般会碰到验证码的困扰,现在支持二维码扫码登录反而简单了,以下是登录的Python代码,主要是获取二维码打印,然后不断的检查扫码状态,如果过期了重新请求二维码(主要看逻辑,由于有

  • java实现二维码生成的几个方法(推荐)

    java实现二维码生成的几个方法,具体如下: 1: 使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip 这个是日本人写的,生成的是我们常见的方形的二维码 可以用中文 如:5677777ghjjjjj 2: 使用BarCode4j生成条形码和二维码 BarCode4j网址:http://sourcefor

  • Java 生成二维码的工具资料整理

    1.  使用SwetakeQRCode在Java项目中生成二维码 http://swetake.com/qr/ 下载地址 或着  http://sourceforge.jp/projects/qrcode/downloads/28391/qrcode.zip 这个是日本人写的,生成的是我们常见的方形的二维码 可以用中文 如:5677777ghjjjjj 有朋友问我要这个图片生成的代码,我就在网上搜索然后整理了一个类,首先要把SwetakeQRCode的jar包qrcode.jar放在工程的编译路

  • Java实现二维码功能的实例代码

    最近突然想写一些文章,所以就陆陆续续的编写一些自我感觉有用的并且大家也可能用到的一些技术代码.方便互相学习交流. 今天这篇文章,主要是利用Java实现二维码: 在写代码之前先讲一下整体思路,以方便更好更快捷的实现功能. (1).首先要想实现二维码功能需要导入com.google.zxing的核心jar包,我这里导入的是core-3.2.1.jar; (2).所谓二维码莫过于把需要的内容放入一张图片中,所以这里首先是创建一张带有参数内容的图片,方法如下: private static Buffer

  • Java实现二维码QRCode的编码和解码与示例解析

    Java实现二维码QRCode的编码和解码 涉及到的一些主要类库,方便大家下载: 编码lib:Qrcode_swetake.jar   (官网介绍-- http://www.swetake.com/qr/index-e.html) 解码lib:qrcode.jar                 (官网介绍-- http://sourceforge.jp/projects/qrcode/) [一].编码: Java代码QRCodeEncoderHandler.java package micha

  • 详解基于Koa2开发微信二维码扫码支付相关流程

    前段时间在开发一个功能,要求是通过微信二维码进行扫码支付.这个情景我们屡见不鲜了,各种电子商城.线下的自动贩卖机等等都会有这个功能.平时只是使用者,如今变为开发者,也是有不小的坑.所以特此写一篇博客记录一下. 注: 要开发微信二维码支付,你必须要有相应的商户号的权限,否则你是无法开发的.若无相应权限,本文不推荐阅读. 两种模式 打开微信支付的文档,我们可以看到两种支付模式:模式一和模式二.这二者的流程图微信的文档里都给出了(不过说实话画得真的有点丑). 文档里指出了二者的区别: 模式一开发前,商

随机推荐