keycloak-service
公開メンバ関数 | 限定公開メンバ関数 | 限定公開変数類 | 関数 | 非公開メンバ関数 | 非公開変数類 | 静的非公開変数類 | 全メンバ一覧
org.keycloak.services.DefaultKeycloakSessionFactory クラス
org.keycloak.services.DefaultKeycloakSessionFactory の継承関係図
Inheritance graph
org.keycloak.services.DefaultKeycloakSessionFactory 連携図
Collaboration graph

公開メンバ関数

void register (ProviderEventListener listener)
 
void unregister (ProviderEventListener listener)
 
void publish (ProviderEvent event)
 
void init ()
 
void deploy (ProviderManager pm)
 
void undeploy (ProviderManager pm)
 
KeycloakSession create ()
 
Set< Spi > getSpis ()
 
Spi getSpi (Class<? extends Provider > providerClass)
 
List< ProviderFactory > getProviderFactories (Class<? extends Provider > clazz)
 
void close ()
 
long getServerStartupTimestamp ()
 

限定公開メンバ関数

Map< Class<? extends Provider >, Map< String, ProviderFactory > > getFactoriesCopy ()
 
void checkProvider ()
 
Map< Class<? extends Provider >, Map< String, ProviderFactory > > loadFactories (ProviderManager pm)
 
void loadSPIs (ProviderManager pm, List< Spi > spiList)
 

限定公開変数類

CopyOnWriteArrayList< ProviderEventListener > listeners = new CopyOnWriteArrayList<>()
 
long serverStartupTimestamp
 

関数

< T extends Provider > String getDefaultProvider (Class< T > clazz)
 
public< T extends Provider > ProviderFactory< T > getProviderFactory (Class< T > clazz)
 
public< T extends Provider > ProviderFactory< T > getProviderFactory (Class< T > clazz, String id)
 
< T extends Provider > Set< String > getAllProviderIds (Class< T > clazz)
 
Class<? extends Provider > getProviderClass (String providerClassName)
 

非公開メンバ関数

boolean isEnabled (ProviderFactory factory, Config.Scope scope)
 
boolean isInternal (ProviderFactory<?> factory)
 

非公開変数類

Set< Spi > spis = new HashSet<>()
 
Map< Class<? extends Provider >, String > provider = new HashMap<>()
 
volatile Map< Class<? extends Provider >, Map< String, ProviderFactory > > factoriesMap = new HashMap<>()
 

静的非公開変数類

static final Logger logger = Logger.getLogger(DefaultKeycloakSessionFactory.class)
 

詳解

関数詳解

◆ checkProvider()

void org.keycloak.services.DefaultKeycloakSessionFactory.checkProvider ( )
inlineprotected
165  {
166  for (Spi spi : spis) {
167  String provider = Config.getProvider(spi.getName());
168  if (provider != null) {
169  this.provider.put(spi.getProviderClass(), provider);
170  if (getProviderFactory(spi.getProviderClass(), provider) == null) {
171  throw new RuntimeException("Failed to find provider " + provider + " for " + spi.getName());
172  }
173  } else {
174  Map<String, ProviderFactory> factories = factoriesMap.get(spi.getProviderClass());
175  if (factories != null && factories.size() == 1) {
176  provider = factories.values().iterator().next().getId();
177  this.provider.put(spi.getProviderClass(), provider);
178  }
179  }
180  }
181  }
volatile Map< Class<? extends Provider >, Map< String, ProviderFactory > > factoriesMap
Definition: DefaultKeycloakSessionFactory.java:50
public< T extends Provider > ProviderFactory< T > getProviderFactory(Class< T > clazz)
Definition: DefaultKeycloakSessionFactory.java:320
Set< Spi > spis
Definition: DefaultKeycloakSessionFactory.java:48
Map< Class<? extends Provider >, String > provider
Definition: DefaultKeycloakSessionFactory.java:49

◆ close()

void org.keycloak.services.DefaultKeycloakSessionFactory.close ( )
inline
360  {
361  ProviderManagerRegistry.SINGLETON.setDeployer(null);
362  for (Map<String, ProviderFactory> factories : factoriesMap.values()) {
363  for (ProviderFactory factory : factories.values()) {
364  factory.close();
365  }
366  }
367  }
volatile Map< Class<? extends Provider >, Map< String, ProviderFactory > > factoriesMap
Definition: DefaultKeycloakSessionFactory.java:50

◆ create()

KeycloakSession org.keycloak.services.DefaultKeycloakSessionFactory.create ( )
inline
297  {
298  KeycloakSession session = new DefaultKeycloakSession(this);
299  return session;
300  }

◆ deploy()

void org.keycloak.services.DefaultKeycloakSessionFactory.deploy ( ProviderManager  pm)
inline

org.keycloak.provider.ProviderManagerDeployerを実装しています。

113  {
114  Map<Class<? extends Provider>, Map<String, ProviderFactory>> copy = getFactoriesCopy();
115  Map<Class<? extends Provider>, Map<String, ProviderFactory>> newFactories = loadFactories(pm);
116  List<ProviderFactory> deployed = new LinkedList<>();
117  List<ProviderFactory> undeployed = new LinkedList<>();
118 
119  for (Map.Entry<Class<? extends Provider>, Map<String, ProviderFactory>> entry : newFactories.entrySet()) {
120  Map<String, ProviderFactory> current = copy.get(entry.getKey());
121  if (current == null) {
122  copy.put(entry.getKey(), entry.getValue());
123  } else {
124  for (ProviderFactory f : entry.getValue().values()) {
125  deployed.add(f);
126  ProviderFactory old = current.remove(f.getId());
127  if (old != null) undeployed.add(old);
128  }
129  current.putAll(entry.getValue());
130  }
131 
132  }
133  factoriesMap = copy;
134  for (ProviderFactory factory : undeployed) {
135  factory.close();
136  }
137  for (ProviderFactory factory : deployed) {
138  factory.postInit(this);
139  }
140  }
volatile Map< Class<? extends Provider >, Map< String, ProviderFactory > > factoriesMap
Definition: DefaultKeycloakSessionFactory.java:50
Map< Class<? extends Provider >, Map< String, ProviderFactory > > loadFactories(ProviderManager pm)
Definition: DefaultKeycloakSessionFactory.java:183
Map< Class<? extends Provider >, Map< String, ProviderFactory > > getFactoriesCopy()
Definition: DefaultKeycloakSessionFactory.java:101

◆ getAllProviderIds()

<T extends Provider> Set<String> org.keycloak.services.DefaultKeycloakSessionFactory.getAllProviderIds ( Class< T >  clazz)
inlinepackage
343  {
344  Set<String> ids = new HashSet<String>();
345  for (ProviderFactory f : factoriesMap.get(clazz).values()) {
346  ids.add(f.getId());
347  }
348  return ids;
349  }
volatile Map< Class<? extends Provider >, Map< String, ProviderFactory > > factoriesMap
Definition: DefaultKeycloakSessionFactory.java:50

◆ getDefaultProvider()

<T extends Provider> String org.keycloak.services.DefaultKeycloakSessionFactory.getDefaultProvider ( Class< T >  clazz)
inlinepackage
302  {
303  return provider.get(clazz);
304  }
Map< Class<? extends Provider >, String > provider
Definition: DefaultKeycloakSessionFactory.java:49

◆ getFactoriesCopy()

Map<Class<? extends Provider>, Map<String, ProviderFactory> > org.keycloak.services.DefaultKeycloakSessionFactory.getFactoriesCopy ( )
inlineprotected
101  {
102  Map<Class<? extends Provider>, Map<String, ProviderFactory>> copy = new HashMap<>();
103  for (Map.Entry<Class<? extends Provider>, Map<String, ProviderFactory>> entry : factoriesMap.entrySet()) {
104  Map<String, ProviderFactory> valCopy = new HashMap<>();
105  valCopy.putAll(entry.getValue());
106  copy.put(entry.getKey(), valCopy);
107  }
108  return copy;
109 
110  }
volatile Map< Class<? extends Provider >, Map< String, ProviderFactory > > factoriesMap
Definition: DefaultKeycloakSessionFactory.java:50

◆ getProviderClass()

Class<? extends Provider> org.keycloak.services.DefaultKeycloakSessionFactory.getProviderClass ( String  providerClassName)
inlinepackage
351  {
352  for (Class<? extends Provider> clazz : factoriesMap.keySet()) {
353  if (clazz.getName().equals(providerClassName)) {
354  return clazz;
355  }
356  }
357  return null;
358  }
volatile Map< Class<? extends Provider >, Map< String, ProviderFactory > > factoriesMap
Definition: DefaultKeycloakSessionFactory.java:50

◆ getProviderFactories()

List<ProviderFactory> org.keycloak.services.DefaultKeycloakSessionFactory.getProviderFactories ( Class<? extends Provider >  clazz)
inline
334  {
335  List<ProviderFactory> list = new LinkedList<ProviderFactory>();
336  if (factoriesMap == null) return list;
337  Map<String, ProviderFactory> providerFactoryMap = factoriesMap.get(clazz);
338  if (providerFactoryMap == null) return list;
339  list.addAll(providerFactoryMap.values());
340  return list;
341  }
volatile Map< Class<? extends Provider >, Map< String, ProviderFactory > > factoriesMap
Definition: DefaultKeycloakSessionFactory.java:50

◆ getProviderFactory() [1/2]

public<T extends Provider> ProviderFactory<T> org.keycloak.services.DefaultKeycloakSessionFactory.getProviderFactory ( Class< T >  clazz)
inlinepackage
320  {
321  return getProviderFactory(clazz, provider.get(clazz));
322  }
public< T extends Provider > ProviderFactory< T > getProviderFactory(Class< T > clazz)
Definition: DefaultKeycloakSessionFactory.java:320
Map< Class<? extends Provider >, String > provider
Definition: DefaultKeycloakSessionFactory.java:49

◆ getProviderFactory() [2/2]

public<T extends Provider> ProviderFactory<T> org.keycloak.services.DefaultKeycloakSessionFactory.getProviderFactory ( Class< T >  clazz,
String  id 
)
inlinepackage
325  {
326  Map<String, ProviderFactory> map = factoriesMap.get(clazz);
327  if (map == null) {
328  return null;
329  }
330  return map.get(id);
331  }
volatile Map< Class<? extends Provider >, Map< String, ProviderFactory > > factoriesMap
Definition: DefaultKeycloakSessionFactory.java:50

◆ getServerStartupTimestamp()

long org.keycloak.services.DefaultKeycloakSessionFactory.getServerStartupTimestamp ( )
inline
戻り値
timestamp of Keycloak server startup
378  {
379  return serverStartupTimestamp;
380  }
long serverStartupTimestamp
Definition: DefaultKeycloakSessionFactory.java:54

◆ getSpi()

Spi org.keycloak.services.DefaultKeycloakSessionFactory.getSpi ( Class<? extends Provider >  providerClass)
inline
312  {
313  for (Spi spi : spis) {
314  if (spi.getProviderClass().equals(providerClass)) return spi;
315  }
316  return null;
317  }
Set< Spi > spis
Definition: DefaultKeycloakSessionFactory.java:48

◆ getSpis()

Set<Spi> org.keycloak.services.DefaultKeycloakSessionFactory.getSpis ( )
inline
307  {
308  return spis;
309  }
Set< Spi > spis
Definition: DefaultKeycloakSessionFactory.java:48

◆ init()

void org.keycloak.services.DefaultKeycloakSessionFactory.init ( )
inline
73  {
74  serverStartupTimestamp = System.currentTimeMillis();
75 
76  ProviderManager pm = new ProviderManager(KeycloakDeploymentInfo.create().services(), getClass().getClassLoader(), Config.scope().getArray("providers"));
77  spis.addAll(pm.loadSpis());
79  for (ProviderManager manager : ProviderManagerRegistry.SINGLETON.getPreBoot()) {
80  Map<Class<? extends Provider>, Map<String, ProviderFactory>> factoryMap = loadFactories(manager);
81  for (Map.Entry<Class<? extends Provider>, Map<String, ProviderFactory>> entry : factoryMap.entrySet()) {
82  Map<String, ProviderFactory> factories = factoriesMap.get(entry.getKey());
83  if (factories == null) {
84  factoriesMap.put(entry.getKey(), entry.getValue());
85  } else {
86  factories.putAll(entry.getValue());
87  }
88  }
89  }
90  checkProvider();
91  for ( Map<String, ProviderFactory> factories : factoriesMap.values()) {
92  for (ProviderFactory factory : factories.values()) {
93  factory.postInit(this);
94  }
95  }
96  // make the session factory ready for hot deployment
97  ProviderManagerRegistry.SINGLETON.setDeployer(this);
98  AdminPermissions.registerListener(this);
99 
100  }
volatile Map< Class<? extends Provider >, Map< String, ProviderFactory > > factoriesMap
Definition: DefaultKeycloakSessionFactory.java:50
void checkProvider()
Definition: DefaultKeycloakSessionFactory.java:165
Set< Spi > spis
Definition: DefaultKeycloakSessionFactory.java:48
long serverStartupTimestamp
Definition: DefaultKeycloakSessionFactory.java:54
Map< Class<? extends Provider >, Map< String, ProviderFactory > > loadFactories(ProviderManager pm)
Definition: DefaultKeycloakSessionFactory.java:183

◆ isEnabled()

boolean org.keycloak.services.DefaultKeycloakSessionFactory.isEnabled ( ProviderFactory  factory,
Config.Scope  scope 
)
inlineprivate
233  {
234  if (!scope.getBoolean("enabled", true)) {
235  return false;
236  }
237  if (factory instanceof EnvironmentDependentProviderFactory) {
238  return ((EnvironmentDependentProviderFactory) factory).isSupported();
239  }
240  return true;
241  }

◆ isInternal()

boolean org.keycloak.services.DefaultKeycloakSessionFactory.isInternal ( ProviderFactory<?>  factory)
inlineprivate
369  {
370  String packageName = factory.getClass().getPackage().getName();
371  return packageName.startsWith("org.keycloak") && !packageName.startsWith("org.keycloak.examples");
372  }

◆ loadFactories()

Map<Class<? extends Provider>, Map<String, ProviderFactory> > org.keycloak.services.DefaultKeycloakSessionFactory.loadFactories ( ProviderManager  pm)
inlineprotected
183  {
184  Map<Class<? extends Provider>, Map<String, ProviderFactory>> factoryMap = new HashMap<>();
185  Set<Spi> spiList = spis;
186 
187  for (Spi spi : spiList) {
188 
189  Map<String, ProviderFactory> factories = new HashMap<String, ProviderFactory>();
190  factoryMap.put(spi.getProviderClass(), factories);
191 
192  String provider = Config.getProvider(spi.getName());
193  if (provider != null) {
194 
195  ProviderFactory factory = pm.load(spi, provider);
196  if (factory == null) {
197  continue;
198  }
199 
200  Config.Scope scope = Config.scope(spi.getName(), provider);
201  if (isEnabled(factory, scope)) {
202  factory.init(scope);
203 
204  if (spi.isInternal() && !isInternal(factory)) {
205  ServicesLogger.LOGGER.spiMayChange(factory.getId(), factory.getClass().getName(), spi.getName());
206  }
207 
208  factories.put(factory.getId(), factory);
209 
210  logger.debugv("Loaded SPI {0} (provider = {1})", spi.getName(), provider);
211  }
212 
213  } else {
214  for (ProviderFactory factory : pm.load(spi)) {
215  Config.Scope scope = Config.scope(spi.getName(), factory.getId());
216  if (isEnabled(factory, scope)) {
217  factory.init(scope);
218 
219  if (spi.isInternal() && !isInternal(factory)) {
220  ServicesLogger.LOGGER.spiMayChange(factory.getId(), factory.getClass().getName(), spi.getName());
221  }
222 
223  factories.put(factory.getId(), factory);
224  } else {
225  logger.debugv("SPI {0} provider {1} disabled", spi.getName(), factory.getId());
226  }
227  }
228  }
229  }
230  return factoryMap;
231  }
boolean isEnabled(ProviderFactory factory, Config.Scope scope)
Definition: DefaultKeycloakSessionFactory.java:233
static final Logger logger
Definition: DefaultKeycloakSessionFactory.java:46
Set< Spi > spis
Definition: DefaultKeycloakSessionFactory.java:48
boolean isInternal(ProviderFactory<?> factory)
Definition: DefaultKeycloakSessionFactory.java:369
Map< Class<? extends Provider >, String > provider
Definition: DefaultKeycloakSessionFactory.java:49

◆ loadSPIs()

void org.keycloak.services.DefaultKeycloakSessionFactory.loadSPIs ( ProviderManager  pm,
List< Spi >  spiList 
)
inlineprotected
243  {
244  for (Spi spi : spiList) {
245  spis.add(spi);
246 
247  Map<String, ProviderFactory> factories = new HashMap<String, ProviderFactory>();
248  factoriesMap.put(spi.getProviderClass(), factories);
249 
250  String provider = Config.getProvider(spi.getName());
251  if (provider != null) {
252  this.provider.put(spi.getProviderClass(), provider);
253 
254  ProviderFactory factory = pm.load(spi, provider);
255  if (factory == null) {
256  throw new RuntimeException("Failed to find provider " + provider + " for " + spi.getName());
257  }
258 
259  Config.Scope scope = Config.scope(spi.getName(), provider);
260  factory.init(scope);
261 
262  if (spi.isInternal() && !isInternal(factory)) {
263  ServicesLogger.LOGGER.spiMayChange(factory.getId(), factory.getClass().getName(), spi.getName());
264  }
265 
266  factories.put(factory.getId(), factory);
267 
268  logger.debugv("Loaded SPI {0} (provider = {1})", spi.getName(), provider);
269  } else {
270  for (ProviderFactory factory : pm.load(spi)) {
271  Config.Scope scope = Config.scope(spi.getName(), factory.getId());
272  if (scope.getBoolean("enabled", true)) {
273  factory.init(scope);
274 
275  if (spi.isInternal() && !isInternal(factory)) {
276  ServicesLogger.LOGGER.spiMayChange(factory.getId(), factory.getClass().getName(), spi.getName());
277  }
278 
279  factories.put(factory.getId(), factory);
280  } else {
281  logger.debugv("SPI {0} provider {1} disabled", spi.getName(), factory.getId());
282  }
283  }
284 
285  if (factories.size() == 1) {
286  provider = factories.values().iterator().next().getId();
287  this.provider.put(spi.getProviderClass(), provider);
288 
289  logger.debugv("Loaded SPI {0} (provider = {1})", spi.getName(), provider);
290  } else {
291  logger.debugv("Loaded SPI {0} (providers = {1})", spi.getName(), factories.keySet());
292  }
293  }
294  }
295  }
volatile Map< Class<? extends Provider >, Map< String, ProviderFactory > > factoriesMap
Definition: DefaultKeycloakSessionFactory.java:50
static final Logger logger
Definition: DefaultKeycloakSessionFactory.java:46
Set< Spi > spis
Definition: DefaultKeycloakSessionFactory.java:48
boolean isInternal(ProviderFactory<?> factory)
Definition: DefaultKeycloakSessionFactory.java:369
Map< Class<? extends Provider >, String > provider
Definition: DefaultKeycloakSessionFactory.java:49

◆ publish()

void org.keycloak.services.DefaultKeycloakSessionFactory.publish ( ProviderEvent  event)
inline
67  {
68  for (ProviderEventListener listener : listeners) {
69  listener.onEvent(event);
70  }
71  }
CopyOnWriteArrayList< ProviderEventListener > listeners
Definition: DefaultKeycloakSessionFactory.java:51

◆ register()

void org.keycloak.services.DefaultKeycloakSessionFactory.register ( ProviderEventListener  listener)
inline
57  {
58  listeners.add(listener);
59  }
CopyOnWriteArrayList< ProviderEventListener > listeners
Definition: DefaultKeycloakSessionFactory.java:51

◆ undeploy()

void org.keycloak.services.DefaultKeycloakSessionFactory.undeploy ( ProviderManager  pm)
inline

org.keycloak.provider.ProviderManagerDeployerを実装しています。

143  {
144  logger.debug("undeploy");
145  // we make a copy to avoid concurrent access exceptions
146  Map<Class<? extends Provider>, Map<String, ProviderFactory>> copy = getFactoriesCopy();
147  MultivaluedHashMap<Class<? extends Provider>, ProviderFactory> factories = pm.getLoadedFactories();
148  List<ProviderFactory> undeployed = new LinkedList<>();
149  for (Map.Entry<Class<? extends Provider>, List<ProviderFactory>> entry : factories.entrySet()) {
150  Map<String, ProviderFactory> registered = copy.get(entry.getKey());
151  for (ProviderFactory factory : entry.getValue()) {
152  undeployed.add(factory);
153  logger.debugv("undeploying {0} of id {1}", factory.getClass().getName(), factory.getId());
154  if (registered != null) {
155  registered.remove(factory.getId());
156  }
157  }
158  }
159  factoriesMap = copy;
160  for (ProviderFactory factory : undeployed) {
161  factory.close();
162  }
163  }
volatile Map< Class<? extends Provider >, Map< String, ProviderFactory > > factoriesMap
Definition: DefaultKeycloakSessionFactory.java:50
static final Logger logger
Definition: DefaultKeycloakSessionFactory.java:46
Map< Class<? extends Provider >, Map< String, ProviderFactory > > getFactoriesCopy()
Definition: DefaultKeycloakSessionFactory.java:101

◆ unregister()

void org.keycloak.services.DefaultKeycloakSessionFactory.unregister ( ProviderEventListener  listener)
inline
62  {
63  listeners.remove(listener);
64  }
CopyOnWriteArrayList< ProviderEventListener > listeners
Definition: DefaultKeycloakSessionFactory.java:51

メンバ詳解

◆ factoriesMap

volatile Map<Class<? extends Provider>, Map<String, ProviderFactory> > org.keycloak.services.DefaultKeycloakSessionFactory.factoriesMap = new HashMap<>()
private

◆ listeners

CopyOnWriteArrayList<ProviderEventListener> org.keycloak.services.DefaultKeycloakSessionFactory.listeners = new CopyOnWriteArrayList<>()
protected

◆ logger

final Logger org.keycloak.services.DefaultKeycloakSessionFactory.logger = Logger.getLogger(DefaultKeycloakSessionFactory.class)
staticprivate

◆ provider

Map<Class<? extends Provider>, String> org.keycloak.services.DefaultKeycloakSessionFactory.provider = new HashMap<>()
private

◆ serverStartupTimestamp

long org.keycloak.services.DefaultKeycloakSessionFactory.serverStartupTimestamp
protected

◆ spis

Set<Spi> org.keycloak.services.DefaultKeycloakSessionFactory.spis = new HashSet<>()
private

このクラス詳解は次のファイルから抽出されました: