Im heutigen Leben ist das Anmelden bei einer Website so einfach geworden, dass Sie, wenn Sie sich bei einer anderen Website anmelden möchten, nur den QR-Code scannen müssen. Aber jeder weiß, wie man ihn verwendet Java zum Scannen des QR-Codes. In diesem Artikel geht es darum, wie man mit Java die Autorisierungsanmeldung für das Code-Scannen implementiert. Lassen Sie uns gemeinsam mehr darüber lernen.
Angenommen, es gibt jetzt zwei Geräte, Gerät A muss den QR-Code scannen, um die Anmeldung zu autorisieren, und Gerät B ist das Gerät, das bereits angemeldet ist. Dann ist die Implementierung wie unten gezeigt:
1: Gerät A generiert einen QR-Code:
Gerät A fordert die getLoginCode-Schnittstelle vom Server an. Diese Schnittstelle wird ausgeführt Verschlüsseln Sie mit Base64 oder anderen Verschlüsselungsmethoden, verwenden Sie diese dann als Wert des QR-Codes, schreiben Sie diesen LoginCode in Redis und legen Sie einen Ablauf von 5 Minuten fest. Dann wird dieser LoginCode an Gerät A zurückgegeben und Gerät A verwendet diesen Wert, um einen Login-QR-Code zu generieren.
Zweitens: Gerät B scannt den Code zur Autorisierung
Wenn Gerät B den QR-Code von Gerät A scannt, trägt es den Wert des QR-Codes und fordert die Schnittstelle scanConfirmLogin zur Autorisierungsanmeldung an Über diese Schnittstelle überprüfen Sie zunächst, ob der QR-Code abgelaufen ist. Wenn er nicht abgelaufen ist, führen Sie die nachfolgende Geschäftslogikverarbeitung durch und schreiben Sie die grundlegenden Informationen und das Token des Benutzers in Redis.
Drei: Gerät A fragt den Autorisierungsstatus ab
Gerät B aktualisiert die Benutzerautorisierungsstatusschnittstelle einmal pro Sekunde. Wenn der Status autorisiert ist, ruft es die Benutzerinformationen ab und führt die folgenden logischen Schritte aus Verarbeitung.
/** * 获取扫描登陆的二维码 * @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)); }
[Empfohlener Kurs: Java-Videokurs]
Das obige ist der detaillierte Inhalt vonJava implementiert die Autorisierungsanmeldung zum Scannen von QR-Codes. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!