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);

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

(0)

相关推荐

  • JavaWeb使用Session和Cookie实现登录认证

    后台管理页面往往需要登录才可以进行操作,这时就需要Seession来记录登录状态 要实现起来也是非常简单,只需要自定义一个HandlerInterceptor就行了 自定义的HandlerInterceptor也只有短短几行代码 public class LoginInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpSer

  • javaweb登录验证码的实现方法

    本文实例为大家分享了javaweb登录验证码的具体代码,供大家参考,具体内容如下 使用: Controller:生成验证码 @RequestMapping("/user/check.jpg") public void createCode(HttpServletRequest request, HttpServletResponse response) throws IOException { // 通知浏览器不要缓存 response.setHeader("Expires&

  • JavaWeb 网上书店 注册和登陆功能案例详解

    本文实例讲述了JavaWeb 网上书店 注册和登陆功能.分享给大家供大家参考,具体如下: 工具:Eclipse + Navicat 源码地址:https://github.com/Sunjinhang/JavaWeb 用户实体:简简单单的六个属性,编号.姓名.密码.电话.邮箱.地址. package Entity; public class User { public User(String id, String userName, String password, String phone,

  • JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)

    JavaWeb实现同一帐号同一时间只能一个地点登陆(类似QQ登录的功能)的实现思路如下所示: 一.该功能有什么作用 大家想想吧.反正总会有这样的需求的.这年头什么需求不会有..呵呵.有时候也不一定是需求,很有可能为了安全也会这么做.例如考试系统,在线聊天系统,很有必要做成这样的吧. 二.实现过程 a.问题分析 在系统中,我们一般都是把登录信息绑定到session中,看来从这入手是可能找到解决办法.说白了,也就是当用户登录时,判断一下这个用户有没有登录,如果登录了,就把以前的那个session清除

  • JavaWeb开发使用Cookie创建-获取-持久化、自动登录、购物记录、作用路径

    1.cookie是啥?随手百度了网友的说说 简单的说,Cookie就是服务器暂存放在你计算机上的一笔资料,好让服务器用来辨认你的计算机.当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,当下次你再光临同一个网站,Web服务器会先看看有没有它上次留下的Cookie资料,有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你. 2.cookie在哪里? 3.cookie可以删除吗? 4.cookie实现原理 第一次请求浏览器,在浏览器的cookie存储区,没有co

  • JavaWeb使用Cookie模拟实现自动登录功能(不需用户名和密码)

    其中包含两个jsp文件,分别为login.jsp和index.jsp 代码如下: login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "

  • JavaWeb登陆功能实现代码

    本文实例为大家分享了JavaWeb登陆功能的方法,供大家参考,具体内容如下 首先我们要JavaWeb登陆的基本流程:JSP页面发送请求-->Servlet-->Servlet通过调用方法从数据库中得到数据并将结果返回页面. 我们先建立三个jsp页面,包括login.jsp(登陆页面).index.jsp(显示登陆成功后的信息).error.jsp(登录失败的页面),其中后两个页面的内容可以随意写,而login.jsp页面的主要内容如下: <form action="LoginS

  • JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JS

  • JavaWeb基于Session实现的用户登陆注销方法示例

    前言 Cookie:cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器. 当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据区,这样,web资源处理的就是各自的数据了. Session:session是服务器端技术,利用session技术,服务器在运行时可以为每一个用户的浏览器创建其独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在session中,当用户再次去访问服务器中的其

  • JavaWeb表单注册界面的实现方法

    JavaWeb表单注册界面的实现方法 今天又做了一个注册界面,还是一如既往的从以前的代码copy过来,于是决定总结一下做注册界面的思路,供同学参考. Step1 页面实现 在这一步主要用到了html.css.JavaScript的知识. 1)  html 建立页面基本结构.建议在做html的时候给每个Element都设置id,方便之后的css.JavaScript操作. 2)  css 给节点设置长.宽.边距.边框.背景等样式. 3)  js 设置按钮鼠标悬停时的背景变化等.页面效果实现. St

随机推荐