1515 */
1616package org .springframework .security .oauth2 .client .registration ;
1717
18+ import java .util .Arrays ;
19+ import java .util .Collections ;
1820import java .util .Iterator ;
1921import java .util .List ;
2022import java .util .Map ;
2123import java .util .concurrent .ConcurrentHashMap ;
22- import java .util .concurrent .ConcurrentHashMap ;
23-
24- import org .springframework .util .Assert ;
2524
2625import reactor .core .publisher .Mono ;
2726
27+ import org .springframework .util .Assert ;
28+
2829/**
2930 * A Reactive {@link ClientRegistrationRepository} that stores {@link ClientRegistration}(s) in-memory.
3031 *
@@ -45,12 +46,12 @@ public final class InMemoryReactiveClientRegistrationRepository
4546 * @param registrations the client registration(s)
4647 */
4748 public InMemoryReactiveClientRegistrationRepository (ClientRegistration ... registrations ) {
48- Assert . notEmpty ( registrations , "registrations cannot be empty" );
49- this . clientIdToClientRegistration = new ConcurrentHashMap <>();
50- for ( ClientRegistration registration : registrations ) {
51- Assert . notNull ( registration , "registrations cannot contain null values" );
52- this . clientIdToClientRegistration . put ( registration . getRegistrationId (), registration );
53- }
49+ this ( toList ( registrations ) );
50+ }
51+
52+ private static List < ClientRegistration > toList ( ClientRegistration ... registrations ) {
53+ Assert . notEmpty ( registrations , "registrations cannot be null or empty" );
54+ return Arrays . asList ( registrations );
5455 }
5556
5657 /**
@@ -59,8 +60,7 @@ public InMemoryReactiveClientRegistrationRepository(ClientRegistration... regist
5960 * @param registrations the client registration(s)
6061 */
6162 public InMemoryReactiveClientRegistrationRepository (List <ClientRegistration > registrations ) {
62- Assert .notEmpty (registrations , "registrations cannot be null or empty" );
63- this .clientIdToClientRegistration = toConcurrentMap (registrations );
63+ this .clientIdToClientRegistration = toUnmodifiableConcurrentMap (registrations );
6464 }
6565
6666 @ Override
@@ -78,11 +78,17 @@ public Iterator<ClientRegistration> iterator() {
7878 return this .clientIdToClientRegistration .values ().iterator ();
7979 }
8080
81- private ConcurrentHashMap <String , ClientRegistration > toConcurrentMap (List <ClientRegistration > registrations ) {
81+ private static Map <String , ClientRegistration > toUnmodifiableConcurrentMap (List <ClientRegistration > registrations ) {
82+ Assert .notEmpty (registrations , "registrations cannot be null or empty" );
8283 ConcurrentHashMap <String , ClientRegistration > result = new ConcurrentHashMap <>();
8384 for (ClientRegistration registration : registrations ) {
85+ Assert .notNull (registration , "no registration can be null" );
86+ if (result .containsKey (registration .getRegistrationId ())) {
87+ throw new IllegalStateException (String .format ("Duplicate key %s" ,
88+ registration .getRegistrationId ()));
89+ }
8490 result .put (registration .getRegistrationId (), registration );
8591 }
86- return result ;
92+ return Collections . unmodifiableMap ( result ) ;
8793 }
8894}
0 commit comments