Heim  >  Artikel  >  Java  >  Java implementiert die Autorisierungsanmeldung zum Scannen von QR-Codes

Java implementiert die Autorisierungsanmeldung zum Scannen von QR-Codes

little bottle
little bottlenach vorne
2019-04-09 14:03:084147Durchsuche

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen