今天就跟大家聊聊有關(guān)使用javaweb怎么實(shí)現(xiàn)app掃碼登錄功能,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、集美ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的集美網(wǎng)站制作公司
1.web頁面主動(dòng)向服務(wù)器索要一張由服務(wù)器生成包含維一標(biāo)識(shí)的二維碼圖片,也可以直接向后臺(tái)索要一個(gè)維一標(biāo)識(shí),拿到標(biāo)識(shí)后通過js生成二維碼。這里本人采用的是第二種方式,至于為什么嗎?個(gè)人感覺這樣方便,后臺(tái)也不要導(dǎo)入架包,最后將該標(biāo)識(shí)存入List集合中,接下來會(huì)用到該標(biāo)識(shí)
2.app掃碼后解析二維碼內(nèi)的維一標(biāo)識(shí),然后再攜帶該標(biāo)識(shí)跟用戶名發(fā)回給服務(wù)器,服務(wù)器接到請(qǐng)求后,遍歷List集合,驗(yàn)證該標(biāo)識(shí)是否為本系統(tǒng)生成的,若是再去驗(yàn)證用戶名是否存在,若存在這時(shí)需將標(biāo)識(shí)與用戶名綁定在一起,綁定的方式有好多種。我這里采用一種較為簡(jiǎn)單的方法Map的方式,將標(biāo)識(shí)做為key 用戶名做為value存在一個(gè)全局Map中,表示該用戶已經(jīng)掃過碼,只等接下來的驗(yàn)證了
3.web頁面從向服務(wù)器索取二維碼或標(biāo)識(shí)后(第一步操作之后)就開始通過ajax每隔2秒或幾秒鐘帶上維一標(biāo)識(shí)向服務(wù)器發(fā)起檢查請(qǐng)求,通過該標(biāo)識(shí)查看Map是否有對(duì)應(yīng)的用戶已經(jīng)掃過碼而未登錄,有的話直接登錄,沒有的話繼續(xù)輪尋,當(dā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綁定的用戶 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與用戶綁定 * @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("正在登錄請(qǐng)稍后..."); } } return new ResponseEntity("請(qǐng)求無效"); } /** * Axaj定時(shí)請(qǐng)求是否有用戶掃描了二維碼 * @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í)查看是否有用戶掃碼后未登入 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)容,你們對(duì)使用javaweb怎么實(shí)現(xiàn)app掃碼登錄功能有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。
網(wǎng)站標(biāo)題:使用javaweb怎么實(shí)現(xiàn)app掃碼登錄功能
文章源于:http://chinadenli.net/article0/gidjio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)公司、響應(yīng)式網(wǎng)站、商城網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)