1717
1818package org .minbox .framework .api .boot .autoconfigure .oauth ;
1919
20+ import org .minbox .framework .api .boot .common .exception .ApiBootException ;
2021import org .minbox .framework .oauth .AuthorizationServerConfiguration ;
2122import org .minbox .framework .oauth .grant .OAuth2TokenGranter ;
2223import org .slf4j .Logger ;
3738import org .springframework .security .oauth2 .provider .token .TokenStore ;
3839import org .springframework .security .oauth2 .provider .token .store .redis .RedisTokenStore ;
3940
41+ import javax .sql .DataSource ;
4042import java .util .List ;
4143
4244import static org .minbox .framework .api .boot .autoconfigure .oauth .ApiBootOauthProperties .API_BOOT_OAUTH_PREFIX ;
@@ -62,17 +64,15 @@ public class ApiBootAuthorizationServerRedisAutoConfiguration extends ApiBootAut
6264 * redis connection factory
6365 */
6466 private RedisConnectionFactory redisConnectionFactory ;
67+ private DataSource dataSource ;
6568
66- /**
67- * constructor instance redis connection factory
68- *
69- * @param objectProvider ApiBoot Token Granter
70- * @param apiBootOauthProperties ApiBoot Oauth Properties
71- * @param redisConnectionFactory Redis Connection Factory
72- */
73- public ApiBootAuthorizationServerRedisAutoConfiguration (ObjectProvider <List <OAuth2TokenGranter >> objectProvider , ApiBootOauthProperties apiBootOauthProperties , RedisConnectionFactory redisConnectionFactory ) {
69+ public ApiBootAuthorizationServerRedisAutoConfiguration (ObjectProvider <List <OAuth2TokenGranter >> objectProvider ,
70+ ApiBootOauthProperties apiBootOauthProperties ,
71+ ObjectProvider <RedisConnectionFactory > connectionFactoryProvider ,
72+ ObjectProvider <DataSource > dataSourceProvider ) {
7473 super (objectProvider , apiBootOauthProperties );
75- this .redisConnectionFactory = redisConnectionFactory ;
74+ this .redisConnectionFactory = connectionFactoryProvider .getIfAvailable ();
75+ this .dataSource = dataSourceProvider .getIfAvailable ();
7676 logger .info ("ApiBoot Oauth2 initialize using redis." );
7777 }
7878
@@ -84,14 +84,24 @@ public ApiBootAuthorizationServerRedisAutoConfiguration(ObjectProvider<List<OAut
8484 */
8585 @ Override
8686 public void configure (ClientDetailsServiceConfigurer clients ) throws Exception {
87- InMemoryClientDetailsServiceBuilder inMemoryClientDetailsServiceBuilder = clients .inMemory ();
88- apiBootOauthProperties .getClients ().stream ().forEach (client -> inMemoryClientDetailsServiceBuilder .withClient (client .getClientId ())
89- .secret (passwordEncoder ().encode (client .getClientSecret ()))
90- .authorizedGrantTypes (client .getGrantTypes ())
91- .scopes (client .getScopes ())
92- .resourceIds (client .getResourceId ())
93- .accessTokenValiditySeconds (client .getAccessTokenValiditySeconds ())
94- .refreshTokenValiditySeconds (client .getRefreshTokenValiditySeconds ()));
87+ if (OAuthClientStorageAway .jdbc == apiBootOauthProperties .getClientStorageAway () && dataSource == null ) {
88+ throw new ApiBootException ("If you use jdbc to store the client, please instantiate the datasource." );
89+ }
90+ switch (apiBootOauthProperties .getClientStorageAway ()) {
91+ case memory :
92+ InMemoryClientDetailsServiceBuilder inMemoryClientDetailsServiceBuilder = clients .inMemory ();
93+ apiBootOauthProperties .getClients ().stream ().forEach (client -> inMemoryClientDetailsServiceBuilder .withClient (client .getClientId ())
94+ .secret (passwordEncoder ().encode (client .getClientSecret ()))
95+ .authorizedGrantTypes (client .getGrantTypes ())
96+ .scopes (client .getScopes ())
97+ .resourceIds (client .getResourceId ())
98+ .accessTokenValiditySeconds (client .getAccessTokenValiditySeconds ())
99+ .refreshTokenValiditySeconds (client .getRefreshTokenValiditySeconds ()));
100+ break ;
101+ case jdbc :
102+ clients .jdbc (dataSource );
103+ break ;
104+ }
95105 }
96106
97107 /**
0 commit comments