我有一个生成访问令牌的方法,该令牌作为API请求的授权载体传递:
private void generateAccessToken() {
try {
OAuthClientRequest request = OAuthClientRequest
.tokenLocation(uri)
.setGrantType(GrantType.CLIENT_CREDENTIALS)
.buildBodyMessage();
request.addHeader("Authorization", "Basic " + Base64.getEncoder()
.encodeToString((clientId + ":" + clientSecret).getBytes(StandardCharsets.UTF_8)));
OAuthClient client = new OAuthClient(new URLConnectionClient());
OAuthJSONAccessTokenResponse oAuthResponse = client
.accessToken(request, OAuth.HttpMethod.POST, OAuthJSONAccessTokenResponse.class);
accessToken = oAuthResponse.getAccessToken();
}
catch (OAuthSystemException | OAuthProblemException e) {
logger.error(e::getMessage);
}
}
我在需要时调用该方法,它生成一个访问令牌:
generateAccessToken();
现在,由于某种原因,身份服务器在第一次尝试时随机无法生成令牌并返回空值。它需要尝试2或3次才能生成令牌。此问题的解决方法是调用generateAccessToken();
3次,这样,如果第一次调用返回null
,则第二次调用将生成该令牌;如果第一次调用返回null
,则第三次调用将生成该令牌。因此,此解决方法修复了此问题:
generateAccessToken();
generateAccessToken();
generateAccessToken();
我没有在每次发送API请求时强制调用3次,而是应用了一个基本条件,即仅当第一次调用生成null
时才调用后续方法。
生成访问令牌();
if (accessToken == null) {
generateAccessToken();
}
if (accessToken == null) {
generateAccessToken();
} else {
String s = ("Access token could not be generated");
}
这个条件运行良好,但我认为也许有一种更好的方法来构造这个条件,除了这个基本的if
条件之外,是否有一种更好的、更强类型的、Java最佳实践的方法来调用generateAccessToken();只有当它最初生成一个null
值的时候?
1条答案
按热度按时间xriantvc1#
你为什么不用while循环呢?
最后添加一个条件,检查一定数量的尝试:
显示错误消息: