欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javaweb實(shí)現(xiàn)app掃碼登錄功能

 更新時(shí)間:2018年10月23日 10:08:30   作者:江西DJ煙仔ReMix  
這篇文章主要為大家詳細(xì)介紹了javaweb實(shí)現(xiàn)app掃碼登錄功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文為大家分享了javaweb實(shí)現(xiàn)app掃碼登錄的具體代碼,供大家參考,具體內(nèi)容如下

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

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

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

4.以下為后臺(tái)代碼 

package com.*;
 
 
@Controller
@RequestMapping(value = "/login")
public class LoginController{
 
 @Autowired
 private UserInfoBaseService userInfoBaseService;
 
 //存儲(chǔ)二維碼維一標(biāo)識(shí)
 public static Set<String> tokes = new HashSet<>();
 //存儲(chǔ)toke綁定的用戶(hù)
 public static Map<String,String> users = new HashMap<>();
 
 /**
 * 生成二維碼維一標(biāo)識(shí)Toke
 * @return
 */
 @ResponseBody
 @RequestMapping("/generationQRCode")
 public String generationToken(){
 String uid = UUID.randomUUID().toString();
 tokes.add(uid);
 return uid;
 }
 
 /**
 * app掃碼后將token與用戶(hù)綁定
 * @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("用戶(hù)不存在");}
  return new ResponseEntity("正在登錄請(qǐng)稍后...");
  }
 }
 return new ResponseEntity("請(qǐng)求無(wú)效");
 }
 
 /**
 * Axaj定時(shí)請(qǐng)求是否有用戶(hù)掃描了二維碼
 * @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.以下為前臺(tái)代碼

//獲取維一標(biāo)識(shí)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定時(shí)查看是否有用戶(hù)掃碼后未登入
    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);

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java.lang.UnsupportedOperationException的問(wèn)題解決

    java.lang.UnsupportedOperationException的問(wèn)題解決

    本文主要介紹了java.lang.UnsupportedOperationException的問(wèn)題解決,該錯(cuò)誤表示調(diào)用的方法不被支持或不可用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • java累加和校驗(yàn)實(shí)現(xiàn)方式16進(jìn)制(推薦)

    java累加和校驗(yàn)實(shí)現(xiàn)方式16進(jìn)制(推薦)

    下面小編就為大家?guī)?lái)一篇java累加和校驗(yàn)實(shí)現(xiàn)方式16進(jìn)制(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • Java中double保留兩位小數(shù)的多種方法

    Java中double保留兩位小數(shù)的多種方法

    這篇文章主要給大家介紹了關(guān)于Java中double保留兩位小數(shù)的多種方法,對(duì)于double數(shù)據(jù)類(lèi)型進(jìn)行計(jì)算發(fā)生的精度丟失的情況,可以按照自己的需求選擇任意方式,需要的朋友可以參考下
    2023-07-07
  • java設(shè)計(jì)模式責(zé)任鏈模式原理案例詳解

    java設(shè)計(jì)模式責(zé)任鏈模式原理案例詳解

    一個(gè)事件需要經(jīng)過(guò)多個(gè)對(duì)象處理是一個(gè)挺常見(jiàn)的場(chǎng)景,譬如采購(gòu)審批流程,請(qǐng)假流程,軟件開(kāi)發(fā)中的異常處理流程,web請(qǐng)求處理流程等各種各樣的流程,可以考慮使用責(zé)任鏈模式來(lái)實(shí)現(xiàn)
    2021-09-09
  • Spring如何使用PropertyPlaceholderConfigurer讀取文件

    Spring如何使用PropertyPlaceholderConfigurer讀取文件

    這篇文章主要介紹了Spring如何使用PropertyPlaceholderConfigurer讀取文件,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Spring Cloud學(xué)習(xí)教程之Zuul統(tǒng)一異常處理與回退

    Spring Cloud學(xué)習(xí)教程之Zuul統(tǒng)一異常處理與回退

    Spring Cloud Zuul對(duì)異常的處理整體來(lái)說(shuō)還是比較方便的,流程也比較清晰,下面這篇文章主要給大家介紹了關(guān)于Spring Cloud學(xué)習(xí)教程之Zuul統(tǒng)一異常處理與回退的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • 全面解析Hibernate關(guān)聯(lián)操作、查詢(xún)操作、高級(jí)特性、并發(fā)處理機(jī)制

    全面解析Hibernate關(guān)聯(lián)操作、查詢(xún)操作、高級(jí)特性、并發(fā)處理機(jī)制

    這篇文章主要介紹了全面解析Hibernate關(guān)聯(lián)操作、查詢(xún)操作、高級(jí)特性、并發(fā)處理機(jī)制的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • java實(shí)現(xiàn)簡(jiǎn)單的推箱子小游戲

    java實(shí)現(xiàn)簡(jiǎn)單的推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單的推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Mybatis 自動(dòng)映射(使用需謹(jǐn)慎)

    Mybatis 自動(dòng)映射(使用需謹(jǐn)慎)

    這篇文章主要介紹了Mybatis 自動(dòng)映射(使用需謹(jǐn)慎),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • spring boot打包成可執(zhí)行jar包

    spring boot打包成可執(zhí)行jar包

    本篇文章主要介紹了spring boot打包成可執(zhí)行jar包,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-10-10

最新評(píng)論