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

java實(shí)現(xiàn)二維碼掃碼授權(quán)登陸

 更新時(shí)間:2018年10月23日 09:55:44   作者:李秀才  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)二維碼掃碼授權(quán)登陸,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

假設(shè)現(xiàn)在有2個(gè)設(shè)備,A設(shè)備需要掃碼授權(quán)登陸,B設(shè)備是已經(jīng)登陸了的設(shè)備。然后實(shí)現(xiàn)如下:

一、A設(shè)備生成生成二維碼:

A設(shè)備向服務(wù)器請求getLoginCode接口,這個(gè)接口根據(jù)請求的sessionId進(jìn)行base64或其他加密方式進(jìn)行加密,然后以此作為二維碼的值,并將這個(gè)loginCode寫到redis里,設(shè)置5分鐘過期。然后將這個(gè)loginCode返回給A設(shè)備,A設(shè)備以此值來生成登陸的二維碼。

二、B設(shè)備掃碼授權(quán)

B設(shè)備來掃A設(shè)備的二維碼的時(shí)候,攜帶二維碼的值,請求授權(quán)登陸的接口scanConfirmLogin,此接口里先校驗(yàn)二維碼是否過期,沒過期的話進(jìn)行后面的業(yè)務(wù)邏輯處理,將用戶的基本信息和token寫到redis里。

三、A設(shè)備輪詢獲取授權(quán)狀態(tài)

B設(shè)備以每秒一次的頻率來刷 獲取用戶授權(quán)狀態(tài)接口,若狀態(tài)為已授權(quán),拿到用戶信息去做后面的邏輯處理。

 /**
 * 獲取掃描登陸的二維碼
 * @param noncestr隨機(jī)字符串
 * @throws Exception 
 */ 
 @RequestMapping(value = "user/getLoginCode.json")
 public void getLoginCode(String noncestr,HttpServletRequest request,HttpServletResponse response) throws Exception {
 if(StringUtil.isBlank(noncestr)){
 apiData(request, response,ReqJson.error(CommonError.PARAMS_IMPERFECT));
 return;
 }
 //參數(shù)的有效性校驗(yàn)在攔截器里實(shí)現(xiàn)
 int expirationTime=300; //時(shí)效5分鐘
 final String sessionId=request.getSession().getId();
 String loginCode=ToolUtils.getBase64(sessionId);
 JedisUtil.set(loginCode, loginCode, expirationTime);
 Map<String,Object> map=new HashMap<>();
 map.put("loginCode", loginCode);
 map.put("expirationTime", expirationTime);
 apiData(request, response, ReqJson.ok(map));
 }
 /**
 * 掃碼確認(rèn)登陸
 * @param loginCode
 * @param request
 * @param response
 * @throws Exception
 */
 @RequestMapping(value = "user/scanConfirmLogin.json")
 @AuthorizationApi
 public void scanConfirmLogin(@CurrentToken final Token token,String loginCode,HttpServletRequest request,HttpServletResponse response) throws Exception {
 if(StringUtil.isBlank(loginCode)){
 apiData(request, response,ReqJson.error(CommonError.PARAMS_IMPERFECT));
 return;
 }
 String userId=token.getUserId();
 Map<String,String> map=new HashMap<>();
 String loginTicket=JedisUtil.get(loginCode);
 if(StringUtil.isBlank(loginTicket)){
 //二維碼過期
 apiData(request, response,ReqJson.error(CommonError.TWO_DIMENSIONAL_CODE_HAS_EXPIRED));
 return;
 }
 UserInfo userInfo = userInfoBiz.getUser(new UserInfo(userId)); 
 if(userInfo==null){
 apiData(request, response,ReqJson.error(UserError.USER_NOT_FOUND));
 return;
 }
 //將用戶信息放在緩存中
 map.put(BaseConfig.ACCESS_TOKEN, token.getAccessToken());
 map.put("userId", userInfo.getUserId());
 map.put("rongCloudToken", userInfo.getRongCloudToken());
 map.put("identity", userInfo.getIdentity());
 JedisUtil.setMap(loginCode+"scanConfirmLogin", map, 300);
 apiData(request, response, ReqJson.ok(new Object()));
 }
 /**
 * 獲取登陸狀態(tài)
 * @param loginCode
 * @param request
 * @param response
 * @throws Exception
 */
 @RequestMapping(value = "user/getScanConfirmLoginStatus.json")
 public void getLoginStatus(final String loginCode,HttpServletRequest request,HttpServletResponse response) throws Exception {
 if(StringUtil.isBlank(loginCode)){
 apiData(request, response,ReqJson.error(CommonError.PARAMS_IMPERFECT));
 return;
 }
 Map<String,String> map= JedisUtil.getMap(loginCode+"scanConfirmLogin");
 if(map==null){
 apiData(request, response,ReqJson.error(CommonError.AUTHORIZATION_HAS_EXPIRED));
 return;
 }
 apiData(request, response, ReqJson.ok(map));
 }

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

相關(guān)文章

  • Java使用LinkedHashMap進(jìn)行分?jǐn)?shù)排序

    Java使用LinkedHashMap進(jìn)行分?jǐn)?shù)排序

    這篇文章主要介紹了Java使用LinkedHashMap進(jìn)行分?jǐn)?shù)排序的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Maven打包所有依賴到一個(gè)可執(zhí)行jar中遇到的問題

    Maven打包所有依賴到一個(gè)可執(zhí)行jar中遇到的問題

    這篇文章主要給大家介紹了關(guān)于Maven打包所有依賴到一個(gè)可執(zhí)行jar中遇到的問題,將依賴打入jar包,由于maven管理了所有的依賴,所以將項(xiàng)目的代碼和依賴打成一個(gè)包對它來說是順理成章的功能,需要的朋友可以參考下
    2023-10-10
  • java 中鎖的性能提高辦法

    java 中鎖的性能提高辦法

    這篇文章主要介紹了java 中鎖的性能提高辦法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • java正則表達(dá)式的應(yīng)用 java讀取文件并獲取電話號碼

    java正則表達(dá)式的應(yīng)用 java讀取文件并獲取電話號碼

    這篇文章主要介紹了java正則表達(dá)式的應(yīng)用,應(yīng)用的內(nèi)容是java讀取文件并獲取電話號碼,感興趣的小伙伴們可以參考一下
    2015-11-11
  • Java案例分享-集合嵌套

    Java案例分享-集合嵌套

    這篇文章主要介紹了Java案例分享-集合嵌套,通過案例創(chuàng)建一個(gè)ArrayList集合,存儲三個(gè)元素,每一個(gè)元素都是HashMap,每一個(gè)HashMap的鍵和值都是String,并遍歷,實(shí)際操作內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • Java利用位運(yùn)算實(shí)現(xiàn)加減乘除的方法詳解

    Java利用位運(yùn)算實(shí)現(xiàn)加減乘除的方法詳解

    我們經(jīng)常使用的加減乘除,我們所看到的只是表面的效果,那么加減乘除在底層究竟是怎么實(shí)現(xiàn)的?今天就讓我們一探究竟
    2022-08-08
  • 簡單談?wù)刯ava自定義注解

    簡單談?wù)刯ava自定義注解

    下面小編就為大家?guī)硪黄唵握務(wù)刯ava自定義注解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Spring輕松解決循環(huán)依賴

    Spring輕松解決循環(huán)依賴

    Spring的解決循環(huán)依賴是有前置條件的,要解決循環(huán)依賴我們首先要了解Spring Bean對象的創(chuàng)建過程和依賴注入的方式。依賴注入方式,我之前的博客有所分享,大家可以在看本篇文章之前進(jìn)行一下小小的回顧
    2023-04-04
  • java字符串格式化(String類format方法)

    java字符串格式化(String類format方法)

    這篇文章主要介紹了java字符串格式化(String類format方法),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • JavaWeb中導(dǎo)出excel文件的簡單方法

    JavaWeb中導(dǎo)出excel文件的簡單方法

    下面小編就為大家?guī)硪黄狫avaWeb中導(dǎo)出excel文件的簡單方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10

最新評論