思路:web请求1接口,得到一个sessionId,后端将sessionId缓存起来,并设置有效期。将sessionId返回给web端,web端将sessionId生成二维码。然后web端每个3、5请求一下轮询接口,判断缓存的sessionId是否正常,app扫码之后获取到sessionId,然后请求接口3,将sessionId和账号(或者token等唯一信息),如果APP在线则更新缓存数据,此时如果web端轮询sessionId缓存的值发生变化则校验是否授权登录成功。

1:web端请求服务端获取到sessionId,将sessionId设置一个过期时间存入redis

@ApiOperation("前端生成二维码,请求绑定关系,二维码过期时间30秒")
@PostMapping("/request")
public AjaxResult request(HttpServletRequest request) {String id = request.getSession().getId();redisService.set(id, id, 30);return AjaxResult.success("", id);
}

2:轮询,返回给前端信息

@ApiOperation("前端轮询该接口,扫码登录之后返回信息")
@PostMapping("/loopCode")
public AjaxResult loopCode(String sessionId) {Object o = redisService.get(sessionId);if (ObjectUtils.isEmpty(o)) {return AjaxResult.error("二维码已过期");}// APP端扫码认证成功之后将1中的缓存sessionId 更新为success或者自定义值if (o.toString().equals("success")) {// 将令牌和用户信息返回给web端跳转即可String mobile = (String) redisService.get(sessionId + "login");String token = (String) redisService.get(sessionId + mobile);AppUser user = tokenManage.getUser(token);Map map = new HashMap();map.put("token", token);map.put("user", user);return AjaxResult.success(map);}return new AjaxResult(AjaxResult.Type.SCAN_CODE, "扫码中");
}

3:扫码登录,app请求之后获取到二维码中的sessionId,将sessionId和手机号在缓存中绑定,并修改1中的缓存value

 @ApiOperation("扫码登录")@PostMapping("/scanLogin")public AjaxResult scanLogin(String mobile, String sessionId) {Object o = redisService.get(sessionId);if (ObjectUtils.isEmpty(o)) {return AjaxResult.error("无效码");}AppUser appUser = appUserService.selectAppUserByPhonenumber(mobile);String token = tokenManage.getToken(appUser);if (ObjectUtils.isEmpty(token)) {return new AjaxResult(APP_AUTH_LOGIN, "令牌已过期,请重新登录");}redisService.set(sessionId, "success", 20);redisService.set(sessionId + "login", mobile, 20);redisService.set(sessionId + mobile, token,20);return AjaxResult.success();}

JAVA web App扫码登录相关推荐

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

    java实现简单扫码登录功能 模仿微信pc网页版扫码登录 使用js代码生成qrcode二维码减轻服务器压力 js循环请求服务端,判断是否qrcode被扫 二维码超时失效功能 二维码被扫成功登录,服务端 ...

  2. Java实现微信扫码登录并实现认证授权

    Java实现微信扫码登录并实现认证授权 1.登录流程及原理 1.1 OAuth2协议 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.0 ...

  3. 【app扫码登录】Java app扫码登录功能实现

    一.实现原理 PC 端发送 "扫码登录" 请求,服务端生成二维码 uuid,并存储二维码的过期时间.状态等信息. PC 端获取二维码并显示. PC 端开始轮询检查二维码的状态(2s ...

  4. 心通达OA 实现APP扫码登录过程

    1.PC端web页面上登录切换到二维码 2.打开手机APP扫码 3.扫描 4.扫描后确认登录. 完成登录,进入心通达OA系统.

  5. 网页二维码,App 扫码登录实现原理

    需求介绍 首先,介绍下什么是扫码登录.现在,大部分同学手机上都装有qq和淘宝,天猫等这一类的软件.而开发这些app的企业,都有他们相对应的网站.为了让用户在使用他们的网站时,登录更加方便和安全.这些企 ...

  6. 架构:网页二维码,App 扫码登录实现原理

    需求介绍 首先,介绍下什么是扫码登录.现在,大部分同学手机上都装有qq和淘宝,天猫等这一类的软件.而开发这些app的企业,都有他们相对应的网站.为了让用户在使用他们的网站时,登录更加方便和安全.这些企 ...

  7. 钉钉授权第三方WEB网站扫码登录

    一.阅读开发文档 首先阅读钉钉官方的开发文档,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息. 二.准备工作 ...

  8. java实现手机扫码登录客户端

    为什么手机登录记住密码后不用再次登录        在了解扫码登录之前我们先了解一下其他内容, 首先为了安全,手机端它是不会存储你的登录密码的.但是在日常使用过程中,我们应该会注意到,只有在你的应用下 ...

  9. 使用java代码实现扫码登录

    使用工具: redis+qrcode.js+jquery.js 注意事项: 扫码手机必须跟项目使用同一网络ip:不然网络ip不同扫码请求访问不到项目服务,我这里是用手机连接电脑热点进行扫码:亲测!!! ...

  10. java 系统生成二维码实现扫码登录 springboot 生成二维码

    文章目录 前言 一.生成二维码 二.业务流程和代码逻辑梳理 总结 前言 使用框架  springboot  自己系统生成二维码,到前端网站,以及APP扫码登录流程,业务流程讲解梳理.也为自己做记录. ...

最新文章

  1. 协议 类似_IPv6基础及地址分类,地址发现协议,一分钟了解下
  2. linux时间同修改,linux 系统时间修改同步
  3. utf8 and unicode
  4. 天平游码读数例题_初二上册物理实验——托盘天平使用的注意事项
  5. 2017《面向对象程序设计》课程作业三
  6. python self 序列_python中序列化对象
  7. go在方法中修改结构体的值_[Go]结构体及其方法
  8. CVPR 2019|手写签名认证的逆鉴别网络
  9. Java校招笔试题-Java基础部分(六)
  10. 在MVVM模式下,ListBox的Command绑定
  11. Android指纹识别
  12. Lyn for Mac v2.1 中文版 – 轻量级图片浏览器
  13. ffplay播放器原理学习
  14. 微信开放平台认证后怎么实现扫码登录功能
  15. 【高等数学】第 2 讲 两个重要的极限定理
  16. php生成拟合线,excel拟合曲线怎么做
  17. 浅谈基于过程与基于对象
  18. 计算机课有平时成绩吗,大学计算机基础课程平时成绩评定方法探究.doc
  19. Hexo+GithubPage搭建Fan主题的博客(2)本地初始化Hexo博客项目
  20. ApeCoin计划推出自己的区块链,Messari分析师们怎么看?

热门文章

  1. Go语言高性能编程手册(万字长文)
  2. 追赶法matlab算法,追赶法matlab程序
  3. 暗黑模式开发一些心得
  4. 8个适合新手的Python小项目
  5. 100多个微信小程序代码免费送
  6. java数据结构——树的实现
  7. 计算机组成原理白中英第四章,白中英计算机组成原理第四章答案.ppt
  8. JavaSE基础之JDK的下载和安装(四步开启Java编程的大门)
  9. 软件工程实验报告:图书管理系统
  10. contos需要MPEG-4 AAC解码器