91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何實現二維碼掃碼授權登陸

發布時間:2020-10-15 17:40:41 來源:億速云 閱讀:317 作者:小新 欄目:編程語言

小編給大家分享一下Java如何實現二維碼掃碼授權登陸,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

一: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));
	}	

以上是Java如何實現二維碼掃碼授權登陸的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德庆县| 高州市| 墨玉县| 呼玛县| 山西省| 新郑市| 呼伦贝尔市| 临武县| 克什克腾旗| 天津市| 宝丰县| 广平县| 河间市| 手机| 蒙阴县| 安阳县| 大厂| 新余市| 东平县| 昌宁县| 横山县| 曲水县| 泽普县| 乌兰浩特市| 涟源市| 自治县| 清河县| 新源县| 昭觉县| 澄城县| 华阴市| 福鼎市| 玛曲县| 乐安县| 集安市| 黑河市| 离岛区| 清徐县| 墨江| 曲麻莱县| 玉门市|