Heim > Java > javaLernprogramm > Hauptteil

Java implementiert die Autorisierungsanmeldung zum Scannen von QR-Codes

little bottle
Freigeben: 2019-04-09 14:04:40
nach vorne
4168 Leute haben es durchsucht

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));
	}	
Nach dem Login kopieren

[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!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage