javaweb实现app扫码登录功能

 更新时间:2018年10月23日 10:08:30   作者:江西DJ烟仔ReMix  
这篇文章主要为大家详细介绍了javaweb实现app扫码登录功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文为大家分享了javaweb实现app扫码登录的具体代码,供大家参考,具体内容如下

1.web页面主动向服务器索要一张由服务器生成包含维一标识的二维码图片,也可以直接向后台索要一个维一标识,拿到标识后通过js生成二维码。这里本人采用的是第二种方式,至于为什么吗?个人感觉这样方便,后台也不要导入架包,最后将该标识存入List集合中,接下来会用到该标识

2.app扫码后解析二维码内的维一标识,然后再携带该标识跟用户名发回给服务器,服务器接到请求后,遍历List集合,验证该标识是否为本系统生成的,若是再去验证用户名是否存在,若存在这时需将标识与用户名绑定在一起,绑定的方式有好多种。我这里采用一种较为简单的方法Map的方式,将标识做为key 用户名做为value存在一个全局Map中,表示该用户已经扫过码,只等接下来的验证了

3.web页面从向服务器索取二维码或标识后(第一步操作之后)就开始通过ajax每隔2秒或几秒钟带上维一标识向服务器发起检查请求,通过该标识查看Map是否有对应的用户已经扫过码而未登录,有的话直接登录,没有的话继续轮寻,当然你也可以采用建立长连接的方式

4.以下为后台代码 

package com.*;
 
 
@Controller
@RequestMapping(value = "/login")
public class LoginController{
 
 @Autowired
 private UserInfoBaseService userInfoBaseService;
 
 //存储二维码维一标识
 public static Set<String> tokes = new HashSet<>();
 //存储toke绑定的用户
 public static Map<String,String> users = new HashMap<>();
 
 /**
 * 生成二维码维一标识Toke
 * @return
 */
 @ResponseBody
 @RequestMapping("/generationQRCode")
 public String generationToken(){
 String uid = UUID.randomUUID().toString();
 tokes.add(uid);
 return uid;
 }
 
 /**
 * app扫码后将token与用户绑定
 * @param loginName
 * @param token
 * @return
 */
 @ResponseBody
 @RequestMapping("/determine")
 public ResponseEntity determine(String loginName, String token){
 for (String t:tokes) {
  if(t.equals(token)){
  users.put(token,loginName);
  UserInfo userInfo = userInfoBaseService.getUserByLoginName(loginName);
  if(null==userInfo){return new ResponseFailure("用户不存在");}
  return new ResponseEntity("正在登录请稍后...");
  }
 }
 return new ResponseEntity("请求无效");
 }
 
 /**
 * Axaj定时请求是否有用户扫描了二维码
 * @param token
 */
 @ResponseBody
 @RequestMapping("/scanLogin")
 public String scanLogin(String token){
 if(StringKit.isBlank(token)){return "token is null";}
 String loginName = users.get(token);
 if(StringKit.isBlank(loginName)){ return "error";}
 //Subject subject = SecurityUtils.getSubject(); //注释的这三行换成你自已的登录代码就行了
 //subject.logout();
 //UsernamePasswordTokenType tokenType = new UsernamePasswordTokenType(loginName, "123456",2);
 try{
  subject.login(tokenType);
 }catch (Exception e){
  e.printStackTrace();
 }
 users.remove(token);
 tokes.remove(token);
 return "success";
 }
 
}

5.以下为前台代码

//获取维一标识token生成二维码
 $.post('${ctx}/login/generationQRCode', function (token) {
   new QRCode(document.getElementById('qrcode'), {text:token,height:125,width:125});
   $('#qrcode').removeAttr('title');
   $('#qrcode').attr('token',token);
    });
    //ajax定时查看是否有用户扫码后未登入
    var time = window.setInterval(function () {
      var token = $('#qrcode').attr('token');
      if(token){
        $.post('${ctx}/login/scanLogin',{'token':token},function (data) {
          if(data == 'success'){
            clearInterval(time);
            window.location.href = '${ctx}/login/';
          }
      })
   }
},1000);

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

相关文章

  • java.lang.UnsupportedOperationException的问题解决

    java.lang.UnsupportedOperationException的问题解决

    本文主要介绍了java.lang.UnsupportedOperationException的问题解决,该错误表示调用的方法不被支持或不可用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • java累加和校验实现方式16进制(推荐)

    java累加和校验实现方式16进制(推荐)

    下面小编就为大家带来一篇java累加和校验实现方式16进制(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • Java中double保留两位小数的多种方法

    Java中double保留两位小数的多种方法

    这篇文章主要给大家介绍了关于Java中double保留两位小数的多种方法,对于double数据类型进行计算发生的精度丢失的情况,可以按照自己的需求选择任意方式,需要的朋友可以参考下
    2023-07-07
  • java设计模式责任链模式原理案例详解

    java设计模式责任链模式原理案例详解

    一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程,软件开发中的异常处理流程,web请求处理流程等各种各样的流程,可以考虑使用责任链模式来实现
    2021-09-09
  • Spring如何使用PropertyPlaceholderConfigurer读取文件

    Spring如何使用PropertyPlaceholderConfigurer读取文件

    这篇文章主要介绍了Spring如何使用PropertyPlaceholderConfigurer读取文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Spring Cloud学习教程之Zuul统一异常处理与回退

    Spring Cloud学习教程之Zuul统一异常处理与回退

    Spring Cloud Zuul对异常的处理整体来说还是比较方便的,流程也比较清晰,下面这篇文章主要给大家介绍了关于Spring Cloud学习教程之Zuul统一异常处理与回退的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2018-04-04
  • 全面解析Hibernate关联操作、查询操作、高级特性、并发处理机制

    全面解析Hibernate关联操作、查询操作、高级特性、并发处理机制

    这篇文章主要介绍了全面解析Hibernate关联操作、查询操作、高级特性、并发处理机制的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • java实现简单的推箱子小游戏

    java实现简单的推箱子小游戏

    这篇文章主要为大家详细介绍了java实现简单的推箱子小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Mybatis 自动映射(使用需谨慎)

    Mybatis 自动映射(使用需谨慎)

    这篇文章主要介绍了Mybatis 自动映射(使用需谨慎),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • spring boot打包成可执行jar包

    spring boot打包成可执行jar包

    本篇文章主要介绍了spring boot打包成可执行jar包,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10

最新评论