公众号防扫描登录


 


     公司想用类似微信扫码登录功能,但受到临时二维码及永久二维码个数的限制,决定放弃公众号自带的二维码生成(还有个弊端就是每次扫码都默认打开跳转到公众号,每扫描一次打开一次公众号,造成打开多个没必要的页面)

 

      我只说下具体思路,具体 实现步骤呵呵了

severlet3                  async功能自行查阅

创建url二维码---oauth2URL--重定向相应的用户确认授权页面---返回用户信息

   1.创建二维码

         自己创建url二维码,创建唯一key及token,利用公众号的oauth2做跳转连接二维码

        

         1.1 key 用类区分二维码的唯一性,token用来识别正确性,扫过过期并15分钟内过期(我用用redis实现),

               oauth2不用多说,跳转后获取用户的身份

    2.登录时候调用时ajax请求获取登录二维码

         2.1 客户端ajax 请求获取二维码

 

 

         2.2服务端返回二维码图片的base64位编码及token

           web.xml 打开

             <async-supported>true</async-supported>

           根据客户端请求挂起请求保存到本地map或redis中

                   AsyncContext context=getRequest().startAsync();
                      // 开始请求的挂起
                      context.setTimeout(0);
                    System.out.println("ip:"+ip+"----token:"+token+"----sysCode:"+sysCode);
                     // 把异步上下文放在列表中以备将来之用
                     CONNECTIONS.put(token, context);

       3.微信扫描跳转到服务端oauth2认证,获取用户身份重定向到相应的url

                   3.1通过微信api获取用户身份

                   3.2获取用户身份后重定向到想用的确认登录页面

                   3.3点击确认将挂起的请求返回相应的用户信息

                    AsyncContext context =CONNECTIONS.get(mapkey);
                        HttpServletResponse response = (HttpServletResponse) context.getResponse();
                        out.print(ret.toJson());
                        out.flush();
                        out.close();
                        //向挂起的请求发送事件
                       context.complete();
                       CONNECTIONS.remove(mapkey);

                   删除token

 

 

 

 

 

 

         

 

        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章