麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

java實現二維碼掃碼授權登陸

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

假設現在有2個設備,A設備需要掃碼授權登陸,B設備是已經登陸了的設備。然后實現如下:

一、A設備生成生成二維碼:

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

二、B設備掃碼授權

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

三、A設備輪詢獲取授權狀態

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

 /** * 獲取掃描登陸的二維碼 * @param noncestr隨機字符串 * @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; } //參數的有效性校驗在攔截器里實現 int expirationTime=300; //時效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)); } /** * 掃碼確認登陸 * @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())); } /** * 獲取登陸狀態 * @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)); }

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


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品一区二区电影 | 久久久鲁 | 欧美日韩国产一区二区三区在线观看 | 欧美黄成人免费网站大全 | 国产午夜精品一区二区三区四区 | 黄色网址免费在线播放 | 亚洲va国产va | 欧美精品久久久久久久久久 | 久久亚洲成人网 | 亚洲成人入口 | 日本黄色免费观看视频 | 国产午夜精品一区二区三区四区 | 精品一区二区三区免费毛片爱 | 国产成人在线观看网站 | 日本成人午夜 | 中韩毛片 | av电影在线网站 | 91精品国产91久久久 | 亚洲免费永久 | 一级毛片在线免费观看视频 | 羞羞网站 | 色视频在线播放 | 欧美va亚洲 | 黄色高清av | 午夜网站视频 | 一级空姐毛片 | 一区二区三区手机在线观看 | 深夜视频福利 | 香蕉视频1024| 污片视频网站 | 在线播放污 | 国产精品白嫩白嫩大学美女 | 国产一级做a爱片在线看免 2019天天干夜夜操 | 国产精品一区在线观看 | 国产1区2 | 茄子福利视频 | 亚洲日本韩国在线观看 | 99re热视频这里只精品 | 久在线播放 | 国产成人精品一区在线播放 | 国产成人高潮免费观看精品 |