Zusammenfassung:
Übergeben Sie eine Instanz von AWSCredentialsProvider
(im Gegensatz zu AWSCredentials
) zu AmazonDynamoDBClient
's Konstruktor, da dies die automatische Aktualisierung von abgelaufenenermöglicht(wenn die spezielle AWSCredentialsProvider
die Refresh-Funktionalität implementiert hat ... was bei allen von AWS bereitgestellten Standards der Fall ist).
Details:
die AWS Java SDK DynamoDB Zusammenhang ExpiredTokenException, die mit dem Präfix beginnt zu beheben "Das Token in der Anforderung enthalten Sicherheit (Service abgelaufen ist: AmazonDynamoDBv2; Statuscode: 400; Fehlercode: ExpiredTokenException; Anfrage-ID: ... ", müssen Sie Ihren Code ändern, um eine Instanz von AWSCredentialsProvider
(und stoppen Sie mit einer Instanz von AWSCredentials
- dh ohne die" Provider "Suffix) an den AmazonDynamoDBClient
Konstruktor. Durch Übergeben der AmazonDynamoDBClient
's Konstruktor eine Instanz von AWSCredentialsProvider
, geben Sie es die Möglichkeit, "automatisch die Anmeldeinformationen zu aktualisieren", wenn/wann die AWSCredentials
ablaufen (die ich gefunden in dieser AWS forum thread, die ein Konto für den Zugriff benötigt).
Um ein explizites Beispiel in Code zu liefern, hier ist eine Verallgemeinerung, was der Code die ExpiredTokenException
Herstellung:
AWSCredentialsProvider aWSCredentialsProvider =
new SystemPropertiesCredentialsProvider();
//the above line may be substituted for any valid
//*Provider implementation
AWSCredentials aWSCredentials =
aWSCredentialsProvider.getCredentials();
AmazonDynamoDBClient amazonDynamoDBClient =
new AmazonDynamoDBClient(aWSCredentials);
...
amazonDynamoDBClient.listTables();
//the above line is where the ExpiredTokenException is eventually thrown
Und hier ist eine Verallgemeinerung des Codes der ExpiredTokenException
beseitigen:
AWSCredentialsProvider aWSCredentialsProvider =
new SystemPropertiesCredentialsProvider();
//substitute the above line for any valid *Provider implementation
AmazonDynamoDBClient amazonDynamoDBClient =
new AmazonDynamoDBClient(aWSCredentialsProvider);
//the above line is now passing an instance of AWSCredentialsProvider
//as opposed to AWSCredentials
...
amazonDynamoDBClient.listTables();
//the above line is now enabled, via the AWSCredentialsProvider, to
//automatically refresh the AWSCredentials if/when they have expired
Angesichts der Tatsache, wie sehr ich über die Java-SDK-Javadocs von AWS und ihre mitgelieferten Beispiele geklettert bin (auf denen ich den Großteil meines eigenen Codes basierte), habe ich diese spezielle Nuance nicht einmal bemerkt. Daher die sehr detaillierte Antwort, die ich für diejenigen bereitgebe, die nach mir kommen (was wahrscheinlich auch mich selbst, LOL, einschließt).
Vielen Dank für das Posten. – NielW