国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

javaweb實現app掃碼登錄功能

2024-07-14 08:42:39
字體:
來源:轉載
供稿:網友

本文為大家分享了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);

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巢湖市| 梁山县| 莫力| 呼和浩特市| 聂拉木县| 呼玛县| 凯里市| 天峻县| 唐河县| 嘉祥县| 梁河县| 措美县| 和田县| 阿尔山市| 历史| 天峻县| 东兴市| 德化县| 酉阳| 芜湖县| 海原县| 临泉县| 冕宁县| 宁城县| 台江县| 四川省| 华宁县| 金华市| 手机| 长寿区| 紫云| 汕头市| 大冶市| 应城市| 互助| 峡江县| 乡城县| 汉川市| 新建县| 荔波县| 丽水市|