Java: Zeitgesteuerte Token-Verwaltungsklasse für die Web-API-Authentifizierung

Wir haben die Implementierung der exklusiven Verarbeitung (Java) untersucht, wenn ein zeitgesteuertes Token für die Web-API-Authentifizierung (unter der Annahme eines OAuth2-Zugriffstokens) von mehreren Threads gemeinsam genutzt wird.

Token-Management-Spezifikationen

Die Spezifikationen für die Token-Verwaltung setzen Folgendes voraus.

Implementierungscode (Java)

Die Token-Verwaltungsklasse, die mit den obigen Spezifikationen arbeitet, wird wie folgt implementiert.

public class TokenManager {

	//Singleton-Muster
	private static TokenManager instance = new TokenManager();
	private TokenManager() {}
	public static TokenManager getInstance() {
		return instance;
	}

    /*Token und Aktualisierungsdatum und -uhrzeit sollten flüchtige Variablen sein, damit immer der neueste Status zum Referenzzeitpunkt abgerufen werden kann*/
    //Zeitgesteuertes Token
	private volatile String token = null;
    //Aktualisieren Sie Datum und Uhrzeit (UNIX-Zeitstempel), berechnet aus dem Gültigkeitszeitraum des Tokens
   	private volatile long refreshAt = 0L;

    //Eine Synchronisierung ist nicht erforderlich, da der neueste Status mit einer flüchtigen Variablen erfasst wird.
	public String getToken() {
		if (System.currentTimeMillis() >= refreshAt) {
			syncUpdateToken();
		}
		return this.token;
	}

    //Die Aktualisierungsverarbeitung wird synchronisiert und ausschließlich gesteuert (sodass jeweils nur ein Thread ausgeführt werden kann).
	private synchronized void syncUpdateToken() {
        //Führen Sie den Aktualisierungsprozess im nachfolgenden Thread, der während des Aktualisierungsprozesses getToken aufgerufen hat, nicht erneut aus
		if (System.currentTimeMillis() < refreshAt) {
			return;
		}

		//Token-Aktualisierungsprozess
        //Um sicherzustellen, dass Sie das neueste Token erhalten, wenn Sie die Überprüfung des Ablaufdatums mit der Methode getToken bestehen
        // token ->Aktualisieren in der Reihenfolge von refreshAt.
		this.token = ...
		this.refreshAt = ...
	}
}

Durch die flüchtigen Variablen der Instanzvariablen (Token, RefreshAt) muss die Token-Referenzmethode (getToken) nicht synchronisiert werden, und die Referenzverarbeitung innerhalb des Token-Ablaufdatums kann parallel ausgeführt werden.

In diesem Fall wird das Ablaufdatum in der Methode erneut überprüft, da der nachfolgende Thread, der getToken während des Aktualisierungsprozesses aufgerufen hat, die Token-Aktualisierungsmethode (updateToken) aufruft, um unnötige Token-Aktualisierungsprozesse zu vermeiden.

Recommended Posts

Java: Zeitgesteuerte Token-Verwaltungsklasse für die Web-API-Authentifizierung
[Java] Paket für die Verwaltung
Beispiel für eine OAuth 2.0-Authentifizierung und Zugriffstokenerfassung (Java)
Erstellen Sie eine API-Schlüsselauthentifizierung für die Web-API in Spring Security
[Java] Memo zum Benennen von Klassennamen
Eine Geschichte über die Java 11-Unterstützung für Webdienste
ChatWork4j für die Verwendung der ChatWork-API in Java
Docker Container Operations mit Docker-Client API für Java
Generieren Sie Java-Clientcode für die SOAP-API von SalesForce
Träumen Sie davon, einfach eine Web-API für die Datenbank eines vorhandenen Java-Systems zu erstellen