|
@@ -43,14 +43,17 @@ public class SimpleOAuth2SessionBuilder implements OAuth2SessionBuilder {
|
|
|
|
|
|
private OAuth2RequestBuilderFactory requestBuilderFactory;
|
|
|
|
|
|
- private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
|
|
|
+ private ReadWriteLock readWriteLock;//.= new ReentrantReadWriteLock();
|
|
|
+
|
|
|
|
|
|
public SimpleOAuth2SessionBuilder(OAuth2UserTokenRepository oAuth2UserTokenRepository,
|
|
|
OAuth2ServerConfig oAuth2ServerConfig,
|
|
|
- OAuth2RequestBuilderFactory requestBuilderFactory) {
|
|
|
+ OAuth2RequestBuilderFactory requestBuilderFactory,
|
|
|
+ ReadWriteLock readWriteLock) {
|
|
|
this.oAuth2UserTokenRepository = oAuth2UserTokenRepository;
|
|
|
this.serverConfig = oAuth2ServerConfig;
|
|
|
this.requestBuilderFactory = requestBuilderFactory;
|
|
|
+ this.readWriteLock = readWriteLock;
|
|
|
}
|
|
|
|
|
|
protected String getRealUrl(String url) {
|
|
@@ -65,20 +68,15 @@ public class SimpleOAuth2SessionBuilder implements OAuth2SessionBuilder {
|
|
|
|
|
|
|
|
|
protected AccessTokenInfo getClientCredentialsToken() {
|
|
|
- readWriteLock.readLock().lock();
|
|
|
- try {
|
|
|
- List<AccessTokenInfo> list = oAuth2UserTokenRepository
|
|
|
- .findByServerIdAndGrantType(serverConfig.getId(), GrantType.client_credentials);
|
|
|
- return list.isEmpty() ? null : list.get(0);
|
|
|
- } finally {
|
|
|
- readWriteLock.readLock().unlock();
|
|
|
- }
|
|
|
+ List<AccessTokenInfo> list = oAuth2UserTokenRepository
|
|
|
+ .findByServerIdAndGrantType(serverConfig.getId(), GrantType.client_credentials);
|
|
|
+ return list.isEmpty() ? null : list.get(0);
|
|
|
}
|
|
|
|
|
|
protected Consumer<AccessTokenInfo> createOnTokenChanged(Supplier<AccessTokenInfo> tokenGetter, String grantType) {
|
|
|
return token -> {
|
|
|
- AccessTokenInfo tokenInfo = tokenGetter.get();
|
|
|
readWriteLock.writeLock().lock();
|
|
|
+ AccessTokenInfo tokenInfo = tokenGetter.get();
|
|
|
try {
|
|
|
if (tokenInfo != null) {
|
|
|
token.setId(tokenInfo.getId());
|
|
@@ -111,12 +109,39 @@ public class SimpleOAuth2SessionBuilder implements OAuth2SessionBuilder {
|
|
|
|
|
|
@Override
|
|
|
public OAuth2Session byClientCredentials() {
|
|
|
- AccessTokenInfo tokenInfo = getClientCredentialsToken();
|
|
|
DefaultOAuth2Session session;
|
|
|
- if (null != tokenInfo) {
|
|
|
- session = new CachedOAuth2Session(tokenInfo);
|
|
|
+ Supplier<AccessTokenInfo> tokenGetter = () -> {
|
|
|
+ readWriteLock.readLock().lock();
|
|
|
+ try {
|
|
|
+ return getClientCredentialsToken();
|
|
|
+ } finally {
|
|
|
+ readWriteLock.readLock().unlock();
|
|
|
+ }
|
|
|
+ };
|
|
|
+ AccessTokenInfo info = tokenGetter.get();
|
|
|
+ if (null != info) {
|
|
|
+ session = new CachedOAuth2Session(info);
|
|
|
} else {
|
|
|
- session = new DefaultOAuth2Session();
|
|
|
+ readWriteLock.writeLock().lock();
|
|
|
+ try {
|
|
|
+ info = getClientCredentialsToken();
|
|
|
+ if (null == info) {
|
|
|
+ session = new DefaultOAuth2Session();
|
|
|
+ session.setServerConfig(serverConfig);
|
|
|
+ session.setRequestBuilderFactory(requestBuilderFactory);
|
|
|
+ session.onTokenChanged(onClientCredentialsTokenChanged);
|
|
|
+ session.init();
|
|
|
+ session.param(OAuth2Constants.grant_type, GrantType.client_credentials);
|
|
|
+ info = session.requestAccessToken();
|
|
|
+ info.setGrantType(GrantType.client_credentials);
|
|
|
+ info.setCreateTime(System.currentTimeMillis());
|
|
|
+ info.setServerId(serverConfig.getId());
|
|
|
+ oAuth2UserTokenRepository.insert(info);
|
|
|
+ }
|
|
|
+ } finally {
|
|
|
+ readWriteLock.writeLock().unlock();
|
|
|
+ }
|
|
|
+ session = new CachedOAuth2Session(info);
|
|
|
}
|
|
|
session.setServerConfig(serverConfig);
|
|
|
session.setRequestBuilderFactory(requestBuilderFactory);
|
|
@@ -151,5 +176,4 @@ public class SimpleOAuth2SessionBuilder implements OAuth2SessionBuilder {
|
|
|
return session;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
}
|