3333import com .obs .services .internal .ObsProperties ;
3434import com .obs .services .internal .ObsService ;
3535import com .obs .services .internal .ServiceException ;
36- import com .obs .services .internal .consensus .CacheManager ;
37- import com .obs .services .internal .consensus .SegmentLock ;
3836import com .obs .services .internal .security .ProviderCredentials ;
3937import com .obs .services .internal .utils .AccessLoggerUtils ;
4038import com .obs .services .internal .utils .ServiceUtils ;
@@ -66,15 +64,13 @@ protected void init(String accessKey, String secretKey, String securityToken, Ob
6664 ProviderCredentials credentials = new ProviderCredentials (accessKey , secretKey , securityToken );
6765 ObsProperties obsProperties = ServiceUtils .changeFromObsConfiguration (config );
6866 credentials .setAuthType (config .getAuthType ());
67+ credentials .setLocalAuthTypeCacheCapacity (config .getLocalAuthTypeCacheCapacity ());
6968 this .obsProperties = obsProperties ;
7069 this .credentials = credentials ;
7170 this .keyManagerFactory = config .getKeyManagerFactory ();
7271 this .trustManagerFactory = config .getTrustManagerFactory ();
7372 if (this .isAuthTypeNegotiation ()) {
74- this .apiVersionCache = new CacheManager ();
7573 this .getProviderCredentials ().setIsAuthTypeNegotiation (true );
76- this .getProviderCredentials ().initThreadLocalAuthType ();
77- this .segmentLock = new SegmentLock ();
7874 }
7975 this .initHttpClient (config .getHttpDispatcher ());
8076 OBSXMLBuilder .setXmlDocumentBuilderFactoryClass (config .getXmlDocumentBuilderFactoryClass ());
@@ -228,7 +224,7 @@ public TemporarySignatureResponse createTemporarySignature(TemporarySignatureReq
228224 ServiceUtils .asserParameterNotNull (request , "TemporarySignatureRequest is null" );
229225 InterfaceLogBean reqBean = new InterfaceLogBean ("createTemporarySignature" , this .getEndpoint (), "" );
230226 try {
231- return this .getProviderCredentials ().getAuthType ( ) == AuthTypeEnum .V4
227+ return this .getProviderCredentials ().getLocalAuthType ( request . getBucketName () ) == AuthTypeEnum .V4
232228 ? this .createV4TemporarySignature (request ) : this .createTemporarySignatureResponse (request );
233229 } catch (Exception e ) {
234230 reqBean .setRespTime (new Date ());
@@ -327,8 +323,8 @@ public PostSignatureResponse createPostSignature(String acl, String contentType,
327323 String objectKey ) throws ObsException {
328324 PostSignatureRequest request = new PostSignatureRequest (expires , new Date (), bucketName , objectKey );
329325 request .getFormParams ().put (
330- this .getProviderCredentials ().getAuthType () == AuthTypeEnum . V4 ? "acl" : this . getIHeaders (). aclHeader (),
331- acl );
326+ this .getProviderCredentials ().getLocalAuthType ( bucketName )
327+ == AuthTypeEnum . V4 ? "acl" : this . getIHeaders ( bucketName ). aclHeader (), acl );
332328 request .getFormParams ().put (com .obs .services .internal .Constants .CommonHeaders .CONTENT_TYPE , contentType );
333329 return this .createPostSignature (request );
334330 }
@@ -364,16 +360,21 @@ public PostSignatureResponse createPostSignature(long expires, String bucketName
364360 public PostSignatureResponse createPostSignature (PostSignatureRequest request ) throws ObsException {
365361 ServiceUtils .asserParameterNotNull (request , "PostSignatureRequest is null" );
366362 InterfaceLogBean reqBean = new InterfaceLogBean ("createPostSignature" , this .getEndpoint (), "" );
367- return createPostSignature (request , reqBean , this .getProviderCredentials ().getAuthType () == AuthTypeEnum .V4 );
363+ return createPostSignature (request , reqBean , this .getProviderCredentials ()
364+ .getLocalAuthType (request .getBucketName ()) == AuthTypeEnum .V4 );
368365 }
369366
370367 protected abstract class ActionCallbackWithResult <T > {
371368
372369 public abstract T action () throws ServiceException ;
373370
374371 void authTypeNegotiate (String bucketName ) throws ServiceException {
375- AuthTypeEnum authTypeEnum = AbstractClient .this .getApiVersion (bucketName );
376- AbstractClient .this .getProviderCredentials ().setThreadLocalAuthType (authTypeEnum );
372+ AuthTypeEnum authTypeEnum = AbstractClient .this .getProviderCredentials ()
373+ .getLocalAuthType ().get (bucketName );
374+ if (authTypeEnum == null ) {
375+ authTypeEnum = AbstractClient .this .getApiVersion (bucketName );
376+ AbstractClient .this .getProviderCredentials ().setLocalAuthType (bucketName , authTypeEnum );
377+ }
377378 }
378379 }
379380
@@ -412,9 +413,6 @@ protected <T> T doActionWithResult(String action, String bucketName, ActionCallb
412413 }
413414 throw ex ;
414415 } finally {
415- if (this .isAuthTypeNegotiation ()) {
416- this .getProviderCredentials ().removeThreadLocalAuthType ();
417- }
418416 AccessLoggerUtils .printLog ();
419417 }
420418 }
@@ -430,6 +428,7 @@ public void refresh(String accessKey, String secretKey, String securityToken) {
430428 ProviderCredentials credentials = new ProviderCredentials (accessKey , secretKey , securityToken );
431429 credentials .setIsAuthTypeNegotiation (this .credentials .getIsAuthTypeNegotiation ());
432430 credentials .setAuthType (this .credentials .getAuthType ());
431+ credentials .setLocalAuthType (this .credentials .getLocalAuthType ());
433432 this .setProviderCredentials (credentials );
434433 }
435434
0 commit comments