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

成都創新互聯主營民樂網站建設的網絡公司,主營網站建設方案,重慶APP開發公司,民樂h5微信小程序開發搭建,民樂網站營銷推廣歡迎民樂等地區企業咨詢
一: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如何實現二維碼掃碼授權登陸的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯行業資訊頻道!
文章題目:Java如何實現二維碼掃碼授權登陸
分享地址:http://www.yijiale78.com/article16/pchgdg.html
成都網站建設公司_創新互聯,為您提供網站收錄、建站公司、ChatGPT、網站設計、微信公眾號、靜態網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯