keycloak
公開メンバ関数 | 関数 | 全メンバ一覧
org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache クラス
org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache の継承関係図
Inheritance graph
org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache 連携図
Collaboration graph

公開メンバ関数

Policy create (AbstractPolicyRepresentation representation, ResourceServer resourceServer)
 
void delete (String id)
 
Policy findById (String id, String resourceServerId)
 
Policy findByName (String name, String resourceServerId)
 
List< PolicyfindByResourceServer (String resourceServerId)
 
List< PolicyfindByResourceServer (Map< String, String[]> attributes, String resourceServerId, int firstResult, int maxResult)
 
List< PolicyfindByResource (String resourceId, String resourceServerId)
 
void findByResource (String resourceId, String resourceServerId, Consumer< Policy > consumer)
 
List< PolicyfindByResourceType (String resourceType, String resourceServerId)
 
void findByResourceType (String resourceType, String resourceServerId, Consumer< Policy > consumer)
 
List< PolicyfindByScopeIds (List< String > scopeIds, String resourceServerId)
 
List< PolicyfindByScopeIds (List< String > scopeIds, String resourceId, String resourceServerId)
 
void findByScopeIds (List< String > scopeIds, String resourceId, String resourceServerId, Consumer< Policy > consumer)
 
List< PolicyfindByType (String type, String resourceServerId)
 
List< PolicyfindDependentPolicies (String id, String resourceServerId)
 

関数

private< R, Q extends PolicyQuery > List< R > cacheQuery (String cacheKey, Class< Q > queryType, Supplier< List< R >> resultSupplier, BiFunction< Long, List< R >, Q > querySupplier, String resourceServerId, Consumer< R > consumer)
 

詳解

関数詳解

◆ cacheQuery()

private<R, Q extends PolicyQuery> List<R> org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.cacheQuery ( String  cacheKey,
Class< Q >  queryType,
Supplier< List< R >>  resultSupplier,
BiFunction< Long, List< R >, Q >  querySupplier,
String  resourceServerId,
Consumer< R >  consumer 
)
inlinepackage
925  {
926  Q query = cache.get(cacheKey, queryType);
927  if (query != null) {
928  logger.tracev("cache hit for key: {0}", cacheKey);
929  }
930  if (query == null) {
931  Long loaded = cache.getCurrentRevision(cacheKey);
932  List<R> model = resultSupplier.get();
933  if (model == null) return null;
934  if (invalidations.contains(cacheKey)) return model;
935  query = querySupplier.apply(loaded, model);
937  if (consumer != null) {
938  for (R policy: model) {
939  consumer.accept(policy);
940  }
941  }
942  return model;
943  } else if (query.isInvalid(invalidations)) {
944  List<R> policies = resultSupplier.get();
945 
946  if (consumer != null) {
947  for (R policy : policies) {
948  consumer.accept(policy);
949  }
950  }
951 
952  return policies;
953  } else {
954  Set<String> policies = query.getPolicies();
955 
956  if (consumer != null) {
957  for (String id : policies) {
958  consumer.accept((R) findById(id, resourceServerId));
959  }
960 
961  return null;
962  }
963 
964  return policies.stream().map(resourceId -> (R) findById(resourceId, resourceServerId)).collect(Collectors.toList());
965  }
966  }
Long getCurrentRevision(String id)
Definition: CacheManager.java:77
Set< String > invalidations
Definition: StoreFactoryCacheSession.java:98
public< T extends Revisioned > T get(String id, Class< T > type)
Definition: CacheManager.java:94
StoreFactoryCacheManager cache
Definition: StoreFactoryCacheSession.java:89
Policy findById(String id, String resourceServerId)
Definition: StoreFactoryCacheSession.java:794
void addRevisioned(Revisioned object, long startupRevision)
Definition: CacheManager.java:132
static final Logger logger
Definition: StoreFactoryCacheSession.java:87
final long startupRevision
Definition: StoreFactoryCacheSession.java:102

◆ create()

Policy org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.create ( AbstractPolicyRepresentation  representation,
ResourceServer  resourceServer 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

762  {
763  Policy policy = getPolicyStoreDelegate().create(representation, resourceServer);
764  Policy cached = findById(policy.getId(), resourceServer.getId());
765  registerPolicyInvalidation(policy.getId(), representation.getName(), representation.getResources(), representation.getScopes(), null, resourceServer.getId());
766  if (cached == null) {
767  cached = findById(policy.getId(), resourceServer.getId());
768  }
769  return cached;
770  }
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
Policy create(AbstractPolicyRepresentation representation, ResourceServer resourceServer)
void registerPolicyInvalidation(String id, String name, Set< String > resources, Set< String > scopes, String defaultResourceType, String serverId)
Definition: StoreFactoryCacheSession.java:277
Policy findById(String id, String resourceServerId)
Definition: StoreFactoryCacheSession.java:794

◆ delete()

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.delete ( String  id)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

773  {
774  if (id == null) return;
775  Policy policy = findById(id, null);
776  if (policy == null) return;
777 
779  Set<String> resources = policy.getResources().stream().map(resource -> resource.getId()).collect(Collectors.toSet());
780  ResourceServer resourceServer = policy.getResourceServer();
781  Set<String> resourceTypes = getResourceTypes(resources, resourceServer.getId());
782  String defaultResourceType = policy.getConfig().get("defaultResourceType");
783  if (Objects.nonNull(defaultResourceType)) {
784  resourceTypes.add(defaultResourceType);
785  }
786  Set<String> scopes = policy.getScopes().stream().map(scope -> scope.getId()).collect(Collectors.toSet());
787  invalidationEvents.add(PolicyRemovedEvent.create(id, policy.getName(), resources, resourceTypes, scopes, resourceServer.getId()));
788  cache.policyRemoval(id, policy.getName(), resources, resourceTypes, scopes, resourceServer.getId(), invalidations);
790 
791  }
Set< String > invalidations
Definition: StoreFactoryCacheSession.java:98
Set< String > getResourceTypes(Set< String > resources, String serverId)
Definition: StoreFactoryCacheSession.java:297
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
void policyRemoval(String id, String name, Set< String > resources, Set< String > resourceTypes, Set< String > scopes, String serverId, Set< String > invalidations)
Definition: StoreFactoryCacheManager.java:150
Set< InvalidationEvent > invalidationEvents
Definition: StoreFactoryCacheSession.java:99
Object invalidateObject(String id)
Definition: CacheManager.java:116
StoreFactoryCacheManager cache
Definition: StoreFactoryCacheSession.java:89
Policy findById(String id, String resourceServerId)
Definition: StoreFactoryCacheSession.java:794

◆ findById()

Policy org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findById ( String  id,
String  resourceServerId 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

794  {
795  if (id == null) return null;
796 
797  CachedPolicy cached = cache.get(id, CachedPolicy.class);
798  if (cached != null) {
799  logger.tracev("by id cache hit: {0}", cached.getId());
800  }
801  if (cached == null) {
802  Long loaded = cache.getCurrentRevision(id);
803  if (! modelMightExist(id)) return null;
804  Policy model = getPolicyStoreDelegate().findById(id, resourceServerId);
805  if (model == null) {
806  setModelDoesNotExists(id, loaded);
807  return null;
808  }
809  if (invalidations.contains(id)) return model;
810  cached = new CachedPolicy(loaded, model);
812  } else if (invalidations.contains(id)) {
813  return getPolicyStoreDelegate().findById(id, resourceServerId);
814  } else if (managedPolicies.containsKey(id)) {
815  return managedPolicies.get(id);
816  }
817  PolicyAdapter adapter = new PolicyAdapter(cached, StoreFactoryCacheSession.this);
818  managedPolicies.put(id, adapter);
819  return adapter;
820  }
Long getCurrentRevision(String id)
Definition: CacheManager.java:77
boolean modelMightExist(String id)
Definition: StoreFactoryCacheSession.java:410
Set< String > invalidations
Definition: StoreFactoryCacheSession.java:98
void setModelDoesNotExists(String id, Long loaded)
Definition: StoreFactoryCacheSession.java:404
Map< String, PolicyAdapter > managedPolicies
Definition: StoreFactoryCacheSession.java:96
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
public< T extends Revisioned > T get(String id, Class< T > type)
Definition: CacheManager.java:94
StoreFactoryCacheSession(StoreFactoryCacheManager cache, KeycloakSession session)
Definition: StoreFactoryCacheSession.java:111
StoreFactoryCacheManager cache
Definition: StoreFactoryCacheSession.java:89
Policy findById(String id, String resourceServerId)
void addRevisioned(Revisioned object, long startupRevision)
Definition: CacheManager.java:132
static final Logger logger
Definition: StoreFactoryCacheSession.java:87
final long startupRevision
Definition: StoreFactoryCacheSession.java:102

◆ findByName()

Policy org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findByName ( String  name,
String  resourceServerId 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

823  {
824  if (name == null) return null;
825  String cacheKey = getPolicyByNameCacheKey(name, resourceServerId);
826  List<Policy> result = cacheQuery(cacheKey, PolicyListQuery.class, () -> {
827  Policy policy = getPolicyStoreDelegate().findByName(name, resourceServerId);
828 
829  if (policy == null) {
830  return Collections.emptyList();
831  }
832 
833  return Arrays.asList(policy);
834  }, (revision, policies) -> new PolicyListQuery(revision, cacheKey, policies.stream().map(policy -> policy.getId()).collect(Collectors.toSet()), resourceServerId), resourceServerId, null);
835 
836  if (result.isEmpty()) {
837  return null;
838  }
839 
840  return result.get(0);
841  }
private< R, Q extends PolicyQuery > List< R > cacheQuery(String cacheKey, Class< Q > queryType, Supplier< List< R >> resultSupplier, BiFunction< Long, List< R >, Q > querySupplier, String resourceServerId, Consumer< R > consumer)
Definition: StoreFactoryCacheSession.java:925
static String getPolicyByNameCacheKey(String name, String serverId)
Definition: StoreFactoryCacheSession.java:362

◆ findByResource() [1/2]

List<Policy> org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findByResource ( String  resourceId,
String  resourceServerId 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

854  {
855  String cacheKey = getPolicyByResource(resourceId, resourceServerId);
856  return cacheQuery(cacheKey, PolicyResourceListQuery.class, () -> getPolicyStoreDelegate().findByResource(resourceId, resourceServerId),
857  (revision, policies) -> new PolicyResourceListQuery(revision, cacheKey, resourceId, policies.stream().map(policy -> policy.getId()).collect(Collectors.toSet()), resourceServerId), resourceServerId, null);
858  }
private< R, Q extends PolicyQuery > List< R > cacheQuery(String cacheKey, Class< Q > queryType, Supplier< List< R >> resultSupplier, BiFunction< Long, List< R >, Q > querySupplier, String resourceServerId, Consumer< R > consumer)
Definition: StoreFactoryCacheSession.java:925
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
static String getPolicyByResource(String resourceId, String serverId)
Definition: StoreFactoryCacheSession.java:366
List< Policy > findByResource(String resourceId, String resourceServerId)
Definition: StoreFactoryCacheSession.java:854

◆ findByResource() [2/2]

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findByResource ( String  resourceId,
String  resourceServerId,
Consumer< Policy consumer 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

861  {
862  String cacheKey = getPolicyByResource(resourceId, resourceServerId);
863  cacheQuery(cacheKey, PolicyResourceListQuery.class, () -> getPolicyStoreDelegate().findByResource(resourceId, resourceServerId),
864  (revision, policies) -> new PolicyResourceListQuery(revision, cacheKey, resourceId, policies.stream().map(policy -> policy.getId()).collect(Collectors.toSet()), resourceServerId), resourceServerId, consumer);
865  }
private< R, Q extends PolicyQuery > List< R > cacheQuery(String cacheKey, Class< Q > queryType, Supplier< List< R >> resultSupplier, BiFunction< Long, List< R >, Q > querySupplier, String resourceServerId, Consumer< R > consumer)
Definition: StoreFactoryCacheSession.java:925
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
static String getPolicyByResource(String resourceId, String serverId)
Definition: StoreFactoryCacheSession.java:366
List< Policy > findByResource(String resourceId, String resourceServerId)
Definition: StoreFactoryCacheSession.java:854

◆ findByResourceServer() [1/2]

List<Policy> org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findByResourceServer ( String  resourceServerId)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

844  {
845  return getPolicyStoreDelegate().findByResourceServer(resourceServerId);
846  }
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
List< Policy > findByResourceServer(String resourceServerId)

◆ findByResourceServer() [2/2]

List<Policy> org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findByResourceServer ( Map< String, String[]>  attributes,
String  resourceServerId,
int  firstResult,
int  maxResult 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

849  {
850  return getPolicyStoreDelegate().findByResourceServer(attributes, resourceServerId, firstResult, maxResult);
851  }
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
List< Policy > findByResourceServer(String resourceServerId)

◆ findByResourceType() [1/2]

List<Policy> org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findByResourceType ( String  resourceType,
String  resourceServerId 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

868  {
869  String cacheKey = getPolicyByResourceType(resourceType, resourceServerId);
870  return cacheQuery(cacheKey, PolicyResourceListQuery.class, () -> getPolicyStoreDelegate().findByResourceType(resourceType, resourceServerId),
871  (revision, policies) -> new PolicyResourceListQuery(revision, cacheKey, resourceType, policies.stream().map(policy -> policy.getId()).collect(Collectors.toSet()), resourceServerId), resourceServerId, null);
872  }
private< R, Q extends PolicyQuery > List< R > cacheQuery(String cacheKey, Class< Q > queryType, Supplier< List< R >> resultSupplier, BiFunction< Long, List< R >, Q > querySupplier, String resourceServerId, Consumer< R > consumer)
Definition: StoreFactoryCacheSession.java:925
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
static String getPolicyByResourceType(String type, String serverId)
Definition: StoreFactoryCacheSession.java:370
List< Policy > findByResourceType(String resourceType, String resourceServerId)
Definition: StoreFactoryCacheSession.java:868

◆ findByResourceType() [2/2]

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findByResourceType ( String  resourceType,
String  resourceServerId,
Consumer< Policy consumer 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

875  {
876  String cacheKey = getPolicyByResourceType(resourceType, resourceServerId);
877  cacheQuery(cacheKey, PolicyResourceListQuery.class, () -> getPolicyStoreDelegate().findByResourceType(resourceType, resourceServerId),
878  (revision, policies) -> new PolicyResourceListQuery(revision, cacheKey, resourceType, policies.stream().map(policy -> policy.getId()).collect(Collectors.toSet()), resourceServerId), resourceServerId, consumer);
879  }
private< R, Q extends PolicyQuery > List< R > cacheQuery(String cacheKey, Class< Q > queryType, Supplier< List< R >> resultSupplier, BiFunction< Long, List< R >, Q > querySupplier, String resourceServerId, Consumer< R > consumer)
Definition: StoreFactoryCacheSession.java:925
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
static String getPolicyByResourceType(String type, String serverId)
Definition: StoreFactoryCacheSession.java:370
List< Policy > findByResourceType(String resourceType, String resourceServerId)
Definition: StoreFactoryCacheSession.java:868

◆ findByScopeIds() [1/3]

List<Policy> org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findByScopeIds ( List< String >  scopeIds,
String  resourceServerId 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

882  {
883  if (scopeIds == null) return null;
884  Set<Policy> result = new HashSet<>();
885 
886  for (String id : scopeIds) {
887  String cacheKey = getPolicyByScope(id, resourceServerId);
888  result.addAll(cacheQuery(cacheKey, PolicyScopeListQuery.class, () -> getPolicyStoreDelegate().findByScopeIds(Arrays.asList(id), resourceServerId), (revision, resources) -> new PolicyScopeListQuery(revision, cacheKey, id, resources.stream().map(resource -> resource.getId()).collect(Collectors.toSet()), resourceServerId), resourceServerId, null));
889  }
890 
891  return new ArrayList<>(result);
892  }
private< R, Q extends PolicyQuery > List< R > cacheQuery(String cacheKey, Class< Q > queryType, Supplier< List< R >> resultSupplier, BiFunction< Long, List< R >, Q > querySupplier, String resourceServerId, Consumer< R > consumer)
Definition: StoreFactoryCacheSession.java:925
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
static String getPolicyByScope(String scope, String serverId)
Definition: StoreFactoryCacheSession.java:374
List< Policy > findByScopeIds(List< String > scopeIds, String resourceServerId)
Definition: StoreFactoryCacheSession.java:882

◆ findByScopeIds() [2/3]

List<Policy> org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findByScopeIds ( List< String >  scopeIds,
String  resourceId,
String  resourceServerId 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

895  {
896  if (scopeIds == null) return null;
897  Set<Policy> result = new HashSet<>();
898 
899  for (String id : scopeIds) {
900  String cacheKey = getPolicyByResourceScope(id, resourceId, resourceServerId);
901  result.addAll(cacheQuery(cacheKey, PolicyScopeListQuery.class, () -> getPolicyStoreDelegate().findByScopeIds(Arrays.asList(id), resourceId, resourceServerId), (revision, resources) -> new PolicyScopeListQuery(revision, cacheKey, id, resources.stream().map(resource -> resource.getId()).collect(Collectors.toSet()), resourceServerId), resourceServerId, null));
902  }
903 
904  return new ArrayList<>(result);
905  }
static String getPolicyByResourceScope(String scope, String resourceId, String serverId)
Definition: StoreFactoryCacheSession.java:378
private< R, Q extends PolicyQuery > List< R > cacheQuery(String cacheKey, Class< Q > queryType, Supplier< List< R >> resultSupplier, BiFunction< Long, List< R >, Q > querySupplier, String resourceServerId, Consumer< R > consumer)
Definition: StoreFactoryCacheSession.java:925
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
List< Policy > findByScopeIds(List< String > scopeIds, String resourceServerId)
Definition: StoreFactoryCacheSession.java:882

◆ findByScopeIds() [3/3]

void org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findByScopeIds ( List< String >  scopeIds,
String  resourceId,
String  resourceServerId,
Consumer< Policy consumer 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

908  {
909  for (String id : scopeIds) {
910  String cacheKey = getPolicyByResourceScope(id, resourceId, resourceServerId);
911  cacheQuery(cacheKey, PolicyScopeListQuery.class, () -> getPolicyStoreDelegate().findByScopeIds(Arrays.asList(id), resourceId, resourceServerId), (revision, resources) -> new PolicyScopeListQuery(revision, cacheKey, id, resources.stream().map(resource -> resource.getId()).collect(Collectors.toSet()), resourceServerId), resourceServerId, consumer);
912  }
913  }
static String getPolicyByResourceScope(String scope, String resourceId, String serverId)
Definition: StoreFactoryCacheSession.java:378
private< R, Q extends PolicyQuery > List< R > cacheQuery(String cacheKey, Class< Q > queryType, Supplier< List< R >> resultSupplier, BiFunction< Long, List< R >, Q > querySupplier, String resourceServerId, Consumer< R > consumer)
Definition: StoreFactoryCacheSession.java:925
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
List< Policy > findByScopeIds(List< String > scopeIds, String resourceServerId)
Definition: StoreFactoryCacheSession.java:882

◆ findByType()

List<Policy> org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findByType ( String  type,
String  resourceServerId 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

916  {
917  return getPolicyStoreDelegate().findByType(type, resourceServerId);
918  }
List< Policy > findByType(String type, String resourceServerId)
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326

◆ findDependentPolicies()

List<Policy> org.keycloak.models.cache.infinispan.authorization.StoreFactoryCacheSession.PolicyCache.findDependentPolicies ( String  id,
String  resourceServerId 
)
inline

org.keycloak.authorization.store.PolicyStoreを実装しています。

921  {
922  return getPolicyStoreDelegate().findDependentPolicies(id, resourceServerId);
923  }
PolicyStore getPolicyStoreDelegate()
Definition: StoreFactoryCacheSession.java:326
List< Policy > findDependentPolicies(String id, String resourceServerId)

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