From 5b2bb2b956696fdc9c4dc12f4bec8e57e7b2801d Mon Sep 17 00:00:00 2001 From: zhou-hao Date: Tue, 5 Dec 2017 00:14:06 +0800 Subject: [PATCH] OAuth2RequestException|BusinessException --- .../simple/session/DefaultOAuth2Session.java | 72 +++++++++++-------- 1 file changed, 43 insertions(+), 29 deletions(-) diff --git a/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-client/src/main/java/org/hswebframework/web/authorization/oauth2/client/simple/session/DefaultOAuth2Session.java b/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-client/src/main/java/org/hswebframework/web/authorization/oauth2/client/simple/session/DefaultOAuth2Session.java index bf691bc58..0c6bd6653 100644 --- a/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-client/src/main/java/org/hswebframework/web/authorization/oauth2/client/simple/session/DefaultOAuth2Session.java +++ b/hsweb-authorization/hsweb-authorization-oauth2/hsweb-authorization-oauth2-client/src/main/java/org/hswebframework/web/authorization/oauth2/client/simple/session/DefaultOAuth2Session.java @@ -19,7 +19,9 @@ package org.hswebframework.web.authorization.oauth2.client.simple.session; import org.apache.commons.codec.binary.Base64; +import org.hswebframework.web.BusinessException; import org.hswebframework.web.authorization.oauth2.client.*; +import org.hswebframework.web.authorization.oauth2.client.exception.OAuth2RequestException; import org.hswebframework.web.authorization.oauth2.client.request.OAuth2Request; import org.hswebframework.web.authorization.oauth2.client.request.OAuth2Session; import org.hswebframework.web.authorization.oauth2.client.response.OAuth2Response; @@ -90,6 +92,8 @@ public class DefaultOAuth2Session implements OAuth2Session { protected void applyTokenParam(OAuth2Request request) { request.param(access_token, getAccessToken().getAccessToken()); + String tokenType = getAccessToken().getTokenType(); + request.header(authorization, "Bearer " + getAccessToken().getAccessToken()); } @@ -114,7 +118,7 @@ public class DefaultOAuth2Session implements OAuth2Session { if (accessTokenInfo == null) { authorize(); } - if(accessTokenInfo.isExpire()){ + if (accessTokenInfo.isExpire()) { refreshToken(); } OAuth2Request request = createRequest(getRealUrl(uriOrUrl)); @@ -125,9 +129,9 @@ public class DefaultOAuth2Session implements OAuth2Session { }); request.onRefreshTokenExpired(reTry -> { //重新请求token - setAccessTokenInfo(requestAccessToken()); - applyTokenParam(request); - reTry.doReTry(); + setAccessTokenInfo(requestAccessToken()); + applyTokenParam(request); + reTry.doReTry(); }); applyTokenParam(request); return request; @@ -143,7 +147,8 @@ public class DefaultOAuth2Session implements OAuth2Session { public AccessTokenInfo requestAccessToken() { AccessTokenInfo accessTokenInfo = accessTokenRequest .param(OAuth2Constants.scope, scope) - .post().onError(OAuth2Response.throwOnError) + .post() + .onError(OAuth2Response.throwOnError) .as(AccessTokenInfo.class); accessTokenInfo.setCreateTime(System.currentTimeMillis()); accessTokenInfo.setUpdateTime(System.currentTimeMillis()); @@ -155,34 +160,43 @@ public class DefaultOAuth2Session implements OAuth2Session { return; } OAuth2Request request = createRequest(getRealUrl(serverConfig.getAccessTokenUrl())); - request.onRefreshTokenExpired(reTry -> { + //request.onRefreshTokenExpired(reTry -> { //重新请求token - setAccessTokenInfo(requestAccessToken()); - applyTokenParam(request); - reTry.doReTry(); - }); + // setAccessTokenInfo(requestAccessToken()); + //applyTokenParam(request); + //reTry.doReTry(); + //}); applyBasicAuthParam(request); boolean[] skip = new boolean[1]; - AccessTokenInfo tokenInfo = request - .param(OAuth2Constants.scope, scope) - .param(OAuth2Constants.grant_type, org.hswebframework.web.oauth2.core.GrantType.refresh_token) - .param(org.hswebframework.web.oauth2.core.GrantType.refresh_token, accessTokenInfo.getRefreshToken()) - .post().onError((oAuth2Response, type) -> { - if(type== ErrorType.EXPIRED_REFRESH_TOKEN){ - setAccessTokenInfo(requestAccessToken()); - skip[0]=true; - return; - } - OAuth2Response.throwOnError.accept(oAuth2Response,type); - }) - .as(AccessTokenInfo.class); - - if(skip[0]){ - return; + try { + AccessTokenInfo tokenInfo = request + .param(OAuth2Constants.scope, scope) + .param(OAuth2Constants.grant_type, org.hswebframework.web.oauth2.core.GrantType.refresh_token) + .param(org.hswebframework.web.oauth2.core.GrantType.refresh_token, accessTokenInfo.getRefreshToken()) + .post() + .onError((oAuth2Response, type) -> { + if (type == ErrorType.EXPIRED_REFRESH_TOKEN) { + setAccessTokenInfo(requestAccessToken()); + skip[0] = true; + return; + } + OAuth2Response.throwOnError.accept(oAuth2Response, type); + }) + .as(AccessTokenInfo.class); + if (skip[0]) { + return; + } + tokenInfo.setCreateTime(accessTokenInfo.getCreateTime()); + tokenInfo.setUpdateTime(System.currentTimeMillis()); + setAccessTokenInfo(tokenInfo); + } catch (OAuth2RequestException|BusinessException e) { + if (!skip[0]) { + //refresh token success + throw e; + } } - tokenInfo.setCreateTime(accessTokenInfo.getCreateTime()); - tokenInfo.setUpdateTime(System.currentTimeMillis()); - setAccessTokenInfo(tokenInfo); + + }