Bladeren bron

OAuth2RequestException|BusinessException

zhou-hao 7 jaren geleden
bovenliggende
commit
5b2bb2b956

+ 43 - 29
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);
+
+
     }