最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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ù)器請(qǐng)求getLoginCode接口,這個(gè)接口根據(jù)請(qǐng)求的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í)候,攜帶二維碼的值,請(qǐng)求授權(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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Assert.assertNotNull()斷言是否是空問題

    Assert.assertNotNull()斷言是否是空問題

    這篇文章主要介紹了Assert.assertNotNull()斷言是否是空問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • java 學(xué)習(xí)筆記(入門篇)_java的安裝與配置

    java 學(xué)習(xí)筆記(入門篇)_java的安裝與配置

    學(xué)習(xí)Java已經(jīng)很長時(shí)間了,由于基礎(chǔ)不好遇到問題就無從下手,所以,打算寫Java的隨手筆記來鞏固基礎(chǔ),加強(qiáng)學(xué)習(xí),接下來講解java的安裝,配置等,感興趣的朋友可以參考下
    2013-01-01
  • java如何連續(xù)執(zhí)行多條cmd命令

    java如何連續(xù)執(zhí)行多條cmd命令

    這篇文章主要介紹了java如何連續(xù)執(zhí)行多條cmd命令的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java中金額元轉(zhuǎn)萬元工具類的實(shí)例

    java中金額元轉(zhuǎn)萬元工具類的實(shí)例

    這篇文章主要介紹了java中金額元轉(zhuǎn)萬元工具類的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法

    Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)五子棋的基礎(chǔ)方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • Mybatis-plus配置分頁插件返回統(tǒng)一結(jié)果集

    Mybatis-plus配置分頁插件返回統(tǒng)一結(jié)果集

    本文主要介紹了Mybatis-plus配置分頁插件返回統(tǒng)一結(jié)果集,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Java 數(shù)據(jù)流之Broadcast State

    Java 數(shù)據(jù)流之Broadcast State

    這篇文章主要介紹了Java 數(shù)據(jù)流之Broadcast State,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java必須掌握的 4 大基礎(chǔ)

    Java必須掌握的 4 大基礎(chǔ)

    我們一直在學(xué)習(xí)Java,但Java中總有一些概念含混不清,不論是對(duì)初級(jí)還是高級(jí)程序員都是如此。所以,這篇文章的目的就是弄清楚這些概念,需要的小伙伴可以參考以下喲
    2021-09-09
  • Exception in thread main java.lang.NoClassDefFoundError錯(cuò)誤解決方法

    Exception in thread main java.lang.NoClassDefFoundError錯(cuò)誤解決方

    這篇文章主要介紹了Exception in thread main java.lang.NoClassDefFoundError錯(cuò)誤解決方法,需要的朋友可以參考下
    2016-08-08
  • 老生常談Eclipse中的BuildPath(必看篇)

    老生常談Eclipse中的BuildPath(必看篇)

    下面小編就為大家?guī)硪黄仙U凟clipse中的BuildPath(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06

最新評(píng)論

五原县| 金坛市| 泗水县| 富平县| 克拉玛依市| 民权县| 察隅县| 安福县| 上杭县| 黔西县| 荣昌县| 民丰县| 婺源县| 镇平县| 岢岚县| 宿州市| 高平市| 伊吾县| 华亭县| 霍城县| 塔河县| 吴桥县| 武城县| 陕西省| 平舆县| 浦县| 汤阴县| 靖西县| 门头沟区| 遂宁市| 武鸣县| 新乐市| 绥棱县| 布拖县| 仪征市| 福州市| 弥勒县| 贡山| 甘肃省| 淄博市| 彭水|