真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用javaweb怎么實現(xiàn)app掃碼登錄功能

今天就跟大家聊聊有關(guān)使用javaweb怎么實現(xiàn)app掃碼登錄功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、集美ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的集美網(wǎng)站制作公司

1.web頁面主動向服務(wù)器索要一張由服務(wù)器生成包含維一標(biāo)識的二維碼圖片,也可以直接向后臺索要一個維一標(biāo)識,拿到標(biāo)識后通過js生成二維碼。這里本人采用的是第二種方式,至于為什么嗎?個人感覺這樣方便,后臺也不要導(dǎo)入架包,最后將該標(biāo)識存入List集合中,接下來會用到該標(biāo)識

2.app掃碼后解析二維碼內(nèi)的維一標(biāo)識,然后再攜帶該標(biāo)識跟用戶名發(fā)回給服務(wù)器,服務(wù)器接到請求后,遍歷List集合,驗證該標(biāo)識是否為本系統(tǒng)生成的,若是再去驗證用戶名是否存在,若存在這時需將標(biāo)識與用戶名綁定在一起,綁定的方式有好多種。我這里采用一種較為簡單的方法Map的方式,將標(biāo)識做為key 用戶名做為value存在一個全局Map中,表示該用戶已經(jīng)掃過碼,只等接下來的驗證了

3.web頁面從向服務(wù)器索取二維碼或標(biāo)識后(第一步操作之后)就開始通過ajax每隔2秒或幾秒鐘帶上維一標(biāo)識向服務(wù)器發(fā)起檢查請求,通過該標(biāo)識查看Map是否有對應(yīng)的用戶已經(jīng)掃過碼而未登錄,有的話直接登錄,沒有的話繼續(xù)輪尋,當(dāng)然你也可以采用建立長連接的方式

4.以下為后臺代碼 

package com.*;
 
 
@Controller
@RequestMapping(value = "/login")
public class LoginController{
 
 @Autowired
 private UserInfoBaseService userInfoBaseService;
 
 //存儲二維碼維一標(biāo)識
 public static Set tokes = new HashSet<>();
 //存儲toke綁定的用戶
 public static Map users = new HashMap<>();
 
 /**
 * 生成二維碼維一標(biāo)識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.以下為前臺代碼

//獲取維一標(biāo)識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);

看完上述內(nèi)容,你們對使用javaweb怎么實現(xiàn)app掃碼登錄功能有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。


網(wǎng)頁名稱:使用javaweb怎么實現(xiàn)app掃碼登錄功能
文章URL:http://weahome.cn/article/gidjio.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部