forked from loafle/openapi-generator-original
don't retry if the access token doesn't change
This is to avoid an infinite loop if the server always gives an invalid token
This commit is contained in:
parent
47a4cf4709
commit
dad28dcba0
@ -1,6 +1,7 @@
|
|||||||
package {{invokerPackage}}.auth;
|
package {{invokerPackage}}.auth;
|
||||||
|
|
||||||
import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED;
|
import static java.net.HttpURLConnection.HTTP_UNAUTHORIZED;
|
||||||
|
import static java.net.HttpURLConnection.HTTP_FORBIDDEN;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -85,6 +86,7 @@ public class OAuth implements Interceptor {
|
|||||||
updateAccessToken(null);
|
updateAccessToken(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getAccessToken() != null) {
|
||||||
// Build the request
|
// Build the request
|
||||||
Builder rb = request.newBuilder();
|
Builder rb = request.newBuilder();
|
||||||
|
|
||||||
@ -107,27 +109,40 @@ public class OAuth implements Interceptor {
|
|||||||
|
|
||||||
// 401 most likely indicates that access token has expired.
|
// 401 most likely indicates that access token has expired.
|
||||||
// Time to refresh and resend the request
|
// Time to refresh and resend the request
|
||||||
if ( response.code() == HTTP_UNAUTHORIZED ) {
|
if ( response != null && (response.code() == HTTP_UNAUTHORIZED | response.code() == HTTP_FORBIDDEN) ) {
|
||||||
updateAccessToken(requestAccessToken);
|
if (updateAccessToken(requestAccessToken)) {
|
||||||
return intercept( chain );
|
return intercept( chain );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return response;
|
return response;
|
||||||
|
} else {
|
||||||
|
return chain.proceed(chain.request());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void updateAccessToken(String requestAccessToken) throws IOException {
|
/*
|
||||||
|
* Returns true if the access token has been updated
|
||||||
|
*/
|
||||||
|
public synchronized boolean updateAccessToken(String requestAccessToken) throws IOException {
|
||||||
if (getAccessToken() == null || getAccessToken().equals(requestAccessToken)) {
|
if (getAccessToken() == null || getAccessToken().equals(requestAccessToken)) {
|
||||||
try {
|
try {
|
||||||
OAuthJSONAccessTokenResponse accessTokenResponse = oauthClient.accessToken(this.tokenRequestBuilder.buildBodyMessage());
|
OAuthJSONAccessTokenResponse accessTokenResponse = oauthClient.accessToken(this.tokenRequestBuilder.buildBodyMessage());
|
||||||
|
if (accessTokenResponse != null && accessTokenResponse.getAccessToken() != null) {
|
||||||
setAccessToken(accessTokenResponse.getAccessToken());
|
setAccessToken(accessTokenResponse.getAccessToken());
|
||||||
if (accessTokenListener != null) {
|
if (accessTokenListener != null) {
|
||||||
accessTokenListener.notify((BasicOAuthToken) accessTokenResponse.getOAuthToken());
|
accessTokenListener.notify((BasicOAuthToken) accessTokenResponse.getOAuthToken());
|
||||||
}
|
}
|
||||||
|
return getAccessToken().equals(requestAccessToken);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
} catch (OAuthSystemException e) {
|
} catch (OAuthSystemException e) {
|
||||||
throw new IOException(e);
|
throw new IOException(e);
|
||||||
} catch (OAuthProblemException e) {
|
} catch (OAuthProblemException e) {
|
||||||
throw new IOException(e);
|
throw new IOException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void registerAccessTokenListener(AccessTokenListener accessTokenListener) {
|
public void registerAccessTokenListener(AccessTokenListener accessTokenListener) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user