Polishing.

Extract methods. Make ReactiveLifecycleAwareSessionManager.isTokenRenewable(…) an instance method with protected visibilit to align with LifecycleAwareSessionManager.

See gh-257.
This commit is contained in:
Mark Paluch
2018-06-25 14:56:35 +02:00
parent d28b81f27f
commit 8abddfbb7d
2 changed files with 62 additions and 57 deletions

View File

@@ -179,37 +179,8 @@ public class LifecycleAwareSessionManager extends LifecycleAwareSessionManagerSu
return false;
}
TokenWrapper wrapper = token.get();
try {
VaultResponse vaultResponse = restOperations.postForObject(
"auth/token/renew-self",
new HttpEntity<>(VaultHttpHeaders.from(token.get().getToken())),
VaultResponse.class);
LoginToken renewed = LoginTokenUtil.from(vaultResponse.getRequiredAuth());
Duration validTtlThreshold = getRefreshTrigger()
.getValidTtlThreshold(renewed);
if (renewed.getLeaseDuration().compareTo(validTtlThreshold) <= 0) {
if (logger.isDebugEnabled()) {
logger.info(String
.format("Token TTL (%s) exceeded validity TTL threshold (%s). Dropping token.",
renewed.getLeaseDuration(), validTtlThreshold));
}
else {
logger.info("Token TTL exceeded validity TTL threshold. Dropping token.");
}
this.token = Optional.empty();
return false;
}
this.token = Optional.of(new TokenWrapper(renewed, wrapper.revocable));
return true;
return doRenew(token.get());
}
catch (HttpStatusCodeException e) {
@@ -237,6 +208,36 @@ public class LifecycleAwareSessionManager extends LifecycleAwareSessionManagerSu
}
}
private boolean doRenew(TokenWrapper wrapper) {
VaultResponse vaultResponse = restOperations.postForObject(
"auth/token/renew-self",
new HttpEntity<>(VaultHttpHeaders.from(wrapper.token)),
VaultResponse.class);
LoginToken renewed = LoginTokenUtil.from(vaultResponse.getRequiredAuth());
Duration validTtlThreshold = getRefreshTrigger().getValidTtlThreshold(renewed);
if (renewed.getLeaseDuration().compareTo(validTtlThreshold) <= 0) {
if (logger.isDebugEnabled()) {
logger.info(String
.format("Token TTL (%s) exceeded validity TTL threshold (%s). Dropping token.",
renewed.getLeaseDuration(), validTtlThreshold));
}
else {
logger.info("Token TTL exceeded validity TTL threshold. Dropping token.");
}
this.token = Optional.empty();
return false;
}
this.token = Optional.of(new TokenWrapper(renewed, wrapper.revocable));
return true;
}
@Override
public VaultToken getSessionToken() {
@@ -245,30 +246,7 @@ public class LifecycleAwareSessionManager extends LifecycleAwareSessionManagerSu
synchronized (lock) {
if (!token.isPresent()) {
VaultToken token = clientAuthentication.login();
TokenWrapper wrapper = new TokenWrapper(token,
token instanceof LoginToken);
if (isTokenSelfLookupEnabled()
&& !ClassUtils.isAssignableValue(LoginToken.class, token)) {
try {
token = LoginTokenAdapter.augmentWithSelfLookup(
this.restOperations, token);
wrapper = new TokenWrapper(token, false);
}
catch (VaultTokenLookupException e) {
logger.warn(String.format(
"Cannot enhance VaultToken to a LoginToken: %s",
e.getMessage()));
}
}
this.token = Optional.of(wrapper);
if (isTokenRenewable()) {
scheduleRenewal();
}
doGetSessionToken();
}
}
}
@@ -277,6 +255,32 @@ public class LifecycleAwareSessionManager extends LifecycleAwareSessionManagerSu
() -> new IllegalStateException("Cannot obtain VaultToken"));
}
private void doGetSessionToken() {
VaultToken token = clientAuthentication.login();
TokenWrapper wrapper = new TokenWrapper(token, token instanceof LoginToken);
if (isTokenSelfLookupEnabled()
&& !ClassUtils.isAssignableValue(LoginToken.class, token)) {
try {
token = LoginTokenAdapter.augmentWithSelfLookup(this.restOperations,
token);
wrapper = new TokenWrapper(token, false);
}
catch (VaultTokenLookupException e) {
logger.warn(String.format(
"Cannot enhance VaultToken to a LoginToken: %s", e.getMessage()));
}
}
this.token = Optional.of(wrapper);
if (isTokenRenewable()) {
scheduleRenewal();
}
}
protected VaultToken login() {
return clientAuthentication.login();
}

View File

@@ -243,7 +243,7 @@ public class ReactiveLifecycleAwareSessionManager extends
}).map(TokenWrapper::getToken);
}
Mono<TokenWrapper> doRenew(TokenWrapper tokenWrapper) {
private Mono<TokenWrapper> doRenew(TokenWrapper tokenWrapper) {
Mono<VaultResponse> exchange = webClient
.post()
@@ -338,7 +338,7 @@ public class ReactiveLifecycleAwareSessionManager extends
/**
* @return {@literal true} if the token is renewable.
*/
private static boolean isTokenRenewable(VaultToken token) {
protected boolean isTokenRenewable(VaultToken token) {
return Optional.of(token)
.filter(LoginToken.class::isInstance)
@@ -384,7 +384,8 @@ public class ReactiveLifecycleAwareSessionManager extends
(LoginToken) token));
}
static Mono<VaultToken> augmentWithSelfLookup(WebClient webClient, VaultToken token) {
private static Mono<VaultToken> augmentWithSelfLookup(WebClient webClient,
VaultToken token) {
Mono<Map<String, Object>> data = lookupSelf(webClient, token);