入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

扫描二维码登录的接口

创建时间:2017-02-16 投稿人: 浏览次数:2102

最近写了一个扫描二维码登录的接口,功能完成后,有很多的知识需要学习。

首先说一下扫码登录的流程:一个程序最重要的就是业务流程,只有明白流程是什么才能继续往下写代码

扫码登录的流程:

(1)生成二维码:

        a.首先生成随机的Id用来表示生成的二维码,使用cookie中的uniqueFlag为名称用来标记是否登录,如果cookie中存在uniqueFlag,则直接将randomId的值为该cookie的值,表示已经登录;没有的话则创该cookie.             CookieTool.addCookie(response,"uniqueFlag",randomId,86400);

       b.生成二维码的内容为接口的地址加上随机的randomId,用来保证每个二维码不一样,其中的链接使用了加密,加密方式为3DES, 返回字符串为Base64

       c.生成二维码,使用BufferImage用来装生成的图片,其中使用了QRCodeUtils工具类中的encode方法,对链接进行生成二维码

       d.输出二维码:尽量不要使用文件的形式,将生成的二维码放到哪个文件中,这样会造成占用空间,并且图片的位置在服务器上不容易找到图片文件的路径,容易造成图片不能生成,我采取的方法是使用response.getOutputStream()  输出流直接输出到页面,这样不会占用空间,而且不管是在本地还是在服务器上都能输出出来  。ImageIO.write(bufImg, "jpg", out);   使用ImageIO展示图片,其中BufImage表示二维码的内容,jpg表示生成二维码的格式,out使用输出流直接输出到页面上。此过程可能会抛出异常,try  catch 一下就可以了。

(2)扫描二维码:定时向后台发起轮询

      a.前台使用Ajax进行定时向后台发送请求,定时方法使用setInterval("方法名",秒数),查询是否登录,这里的查询是查询根据cookie的uniqueFlag名得到相应的randomId,再通过randomId得到所对应的redis缓存,判断是否是空,如果不是空则进行相应操作,存用户的信息,存cookie,存session,并返回true,是空的话直接返回false;

      b.后台查询:得到cookie中uniqueFlag的random值,得到redis缓存中以random为key值的sign值,如果sign不为空,分割字符串,并将对应的信息存到cookie和session中,返回true,否则返回false.

(3)扫码登录:手机app处于登录状态

     a.接口的使用post 表单提交 key value 的方式得到签名sign值和二维码Id的值

       b.其中的sign传值时需要加密,在springMvc中直接通过名得到值,也可以通过request.getParameter()来得到相应的值。

      c.接收到参数最先判断是否为空,如果为空,则登录失败,可以使用map  ,put进相应的信息再转成json

      d.不是空则进行解密,并把解密后的结果存到redis中以randomId为key的缓存中,返回成功。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。