Class RefreshProtectedCredentialsProvider<T>
- Type Parameters:
T
- the type of token (usually specified by the subclass)
- All Implemented Interfaces:
CredentialsProvider
- Direct Known Subclasses:
OAuth2ClientCredentialsGrantCredentialsProvider
CredentialsProvider
that does not let token refresh happen concurrently.
A token is usually long-lived (several minutes or more), can be re-used inside the same application,
and refreshing it is a costly operation. This base class lets a first call to refresh()
pass and block concurrent calls until the first call is over. Concurrent calls are then unblocked and
can benefit from the refresh. This avoids unnecessary refresh operations to happen if a token
is already being renewed.
Subclasses need to provide the actual token retrieval (whether is a first retrieval or a renewal is a implementation detail) and how to extract information (username, password, time before expiration) from the retrieved token.
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionPassword/secret/token to use for authenticationThe time before the credentials expire, if they do expire.Username to use for authenticationprotected abstract String
passwordFromToken
(T token) void
refresh()
Instructs the provider to refresh or renew credentials.protected abstract T
protected abstract Duration
timeBeforeExpiration
(T token) protected abstract String
usernameFromToken
(T token)
-
Constructor Details
-
RefreshProtectedCredentialsProvider
public RefreshProtectedCredentialsProvider()
-
-
Method Details
-
getUsername
Description copied from interface:CredentialsProvider
Username to use for authentication- Specified by:
getUsername
in interfaceCredentialsProvider
- Returns:
- username
-
getPassword
Description copied from interface:CredentialsProvider
Password/secret/token to use for authentication- Specified by:
getPassword
in interfaceCredentialsProvider
- Returns:
- password/secret/token
-
getTimeBeforeExpiration
Description copied from interface:CredentialsProvider
The time before the credentials expire, if they do expire.If credentials do not expire, must return null. Default behavior is to return null, assuming credentials never expire.
- Specified by:
getTimeBeforeExpiration
in interfaceCredentialsProvider
- Returns:
- time before expiration
-
refresh
public void refresh()Description copied from interface:CredentialsProvider
Instructs the provider to refresh or renew credentials.Default behavior is no-op.
- Specified by:
refresh
in interfaceCredentialsProvider
-
retrieveToken
-
usernameFromToken
-
passwordFromToken
-
timeBeforeExpiration
-