Sommario:
Passare un'istanza di AWSCredentialsProvider
(in contrasto con AWSCredentials
) nel costruttore AmazonDynamoDBClient
poiché ciò consente l'aggiornamento automatico scaduto AWSCredentials
(se il particolare AWSCredentialsProvider
ha implementato la funzionalità di aggiornamento ... che è il caso di tutti quelli forniti da AWS standard).
Dettagli:
Per risolvere l'ExpiredTokenException relativi AWS Java SDK DynamoDB che inizia con il prefisso "Il token di sicurezza incluse nella richiesta è scaduto (Servizio: AmazonDynamoDBv2; Codice di stato: 400; Codice errore: ExpiredTokenException; ID richiesta: ... ", è necessario modificare il codice per fornire un'istanza di AWSCredentialsProvider
(e interrompere l'utilizzo di un'istanza di AWSCredentials
, ovvero senza il suffisso" Provider ") nel costruttore di AmazonDynamoDBClient
. Passando allo strumento AmazonDynamoDBClient
costruttore un'istanza di AWSCredentialsProvider
, gli dai la possibilità di "aggiornare automaticamente le credenziali" se/quando scade il AWSCredentials
(che trovato in questo AWS forum thread che richiede l'accesso di un account).
Per fornire un esempio esplicito nel codice, ecco una generalizzazione di ciò che il codice sta producendo il ExpiredTokenException
:
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
E qui è una generalizzazione del codice eliminando il ExpiredTokenException
:
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
Dato quanto ho scalato su tutti i Javadocs Java SDK di AWS e sui loro esempi forniti (su cui ho basato la maggior parte del mio codice), non ho notato una volta che questa sfumatura specifica veniva richiamata. Quindi, la risposta molto dettagliata che sto fornendo per coloro che verranno dopo di me (che probabilmente includerò me stesso, LOL).
Grazie per aver postato questo. – NielW