keycloak
公開メンバ関数 | 非公開変数類 | 全メンバ一覧
org.keycloak.authorization.jpa.store.JPAResourceStore クラス
org.keycloak.authorization.jpa.store.JPAResourceStore の継承関係図
Inheritance graph
org.keycloak.authorization.jpa.store.JPAResourceStore 連携図
Collaboration graph

公開メンバ関数

 JPAResourceStore (EntityManager entityManager, AuthorizationProvider provider)
 
Resource create (String name, ResourceServer resourceServer, String owner)
 
Resource create (String id, String name, ResourceServer resourceServer, String owner)
 
void delete (String id)
 
Resource findById (String id, String resourceServerId)
 
List< ResourcefindByOwner (String ownerId, String resourceServerId)
 
void findByOwner (String ownerId, String resourceServerId, Consumer< Resource > consumer)
 
List< ResourcefindByUri (String uri, String resourceServerId)
 
List< ResourcefindByResourceServer (String resourceServerId)
 
List< ResourcefindByResourceServer (Map< String, String[]> attributes, String resourceServerId, int firstResult, int maxResult)
 
List< ResourcefindByScope (List< String > scopes, String resourceServerId)
 
void findByScope (List< String > scopes, String resourceServerId, Consumer< Resource > consumer)
 
Resource findByName (String name, String resourceServerId)
 
Resource findByName (String name, String ownerId, String resourceServerId)
 
List< ResourcefindByType (String type, String resourceServerId)
 
void findByType (String type, String resourceServerId, Consumer< Resource > consumer)
 

非公開変数類

final EntityManager entityManager
 
final AuthorizationProvider provider
 

詳解

著者
Pedro Igor

構築子と解体子

◆ JPAResourceStore()

org.keycloak.authorization.jpa.store.JPAResourceStore.JPAResourceStore ( EntityManager  entityManager,
AuthorizationProvider  provider 
)
inline
52  {
54  this.provider = provider;
55  }
final EntityManager entityManager
Definition: JPAResourceStore.java:49
final AuthorizationProvider provider
Definition: JPAResourceStore.java:50

関数詳解

◆ create() [1/2]

Resource org.keycloak.authorization.jpa.store.JPAResourceStore.create ( String  name,
ResourceServer  resourceServer,
String  owner 
)
inline

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

58  {
59  return create(null, name, resourceServer, owner);
60  }
Resource create(String name, ResourceServer resourceServer, String owner)
Definition: JPAResourceStore.java:58

◆ create() [2/2]

Resource org.keycloak.authorization.jpa.store.JPAResourceStore.create ( String  id,
String  name,
ResourceServer  resourceServer,
String  owner 
)
inline

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

63  {
64  ResourceEntity entity = new ResourceEntity();
65 
66  if (id == null) {
67  entity.setId(KeycloakModelUtils.generateId());
68  } else {
69  entity.setId(id);
70  }
71 
72  entity.setName(name);
73  entity.setResourceServer(ResourceServerAdapter.toEntity(entityManager, resourceServer));
74  entity.setOwner(owner);
75 
76  this.entityManager.persist(entity);
77  this.entityManager.flush();
78 
79  return new ResourceAdapter(entity, entityManager, provider.getStoreFactory());
80  }
final EntityManager entityManager
Definition: JPAResourceStore.java:49
final AuthorizationProvider provider
Definition: JPAResourceStore.java:50
StoreFactory getStoreFactory()
Definition: AuthorizationProvider.java:109

◆ delete()

void org.keycloak.authorization.jpa.store.JPAResourceStore.delete ( String  id)
inline

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

83  {
84  ResourceEntity resource = entityManager.getReference(ResourceEntity.class, id);
85  if (resource == null) return;
86 
87  resource.getScopes().clear();
88  this.entityManager.remove(resource);
89  }
final EntityManager entityManager
Definition: JPAResourceStore.java:49

◆ findById()

Resource org.keycloak.authorization.jpa.store.JPAResourceStore.findById ( String  id,
String  resourceServerId 
)
inline

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

92  {
93  if (id == null) {
94  return null;
95  }
96 
97  ResourceEntity entity = entityManager.find(ResourceEntity.class, id);
98  if (entity == null) return null;
99  return new ResourceAdapter(entity, entityManager, provider.getStoreFactory());
100  }
final EntityManager entityManager
Definition: JPAResourceStore.java:49
final AuthorizationProvider provider
Definition: JPAResourceStore.java:50
StoreFactory getStoreFactory()
Definition: AuthorizationProvider.java:109

◆ findByName() [1/2]

Resource org.keycloak.authorization.jpa.store.JPAResourceStore.findByName ( String  name,
String  resourceServerId 
)
inline

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

265  {
266  return findByName(name, resourceServerId, resourceServerId);
267  }
Resource findByName(String name, String resourceServerId)
Definition: JPAResourceStore.java:265

◆ findByName() [2/2]

Resource org.keycloak.authorization.jpa.store.JPAResourceStore.findByName ( String  name,
String  ownerId,
String  resourceServerId 
)
inline

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

270  {
271  TypedQuery<String> query = entityManager.createNamedQuery("findResourceIdByName", String.class);
272 
273  query.setFlushMode(FlushModeType.COMMIT);
274  query.setParameter("serverId", resourceServerId);
275  query.setParameter("name", name);
276  query.setParameter("ownerId", ownerId);
277 
278  try {
279  String id = query.getSingleResult();
280  return provider.getStoreFactory().getResourceStore().findById(id, resourceServerId);
281  } catch (NoResultException ex) {
282  return null;
283  }
284  }
final EntityManager entityManager
Definition: JPAResourceStore.java:49
final AuthorizationProvider provider
Definition: JPAResourceStore.java:50
StoreFactory getStoreFactory()
Definition: AuthorizationProvider.java:109
Resource findById(String id, String resourceServerId)

◆ findByOwner() [1/2]

List<Resource> org.keycloak.authorization.jpa.store.JPAResourceStore.findByOwner ( String  ownerId,
String  resourceServerId 
)
inline

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

103  {
104  List<Resource> list = new LinkedList<>();
105 
106  findByOwner(ownerId, resourceServerId, list::add);
107 
108  return list;
109  }
List< Resource > findByOwner(String ownerId, String resourceServerId)
Definition: JPAResourceStore.java:103

◆ findByOwner() [2/2]

void org.keycloak.authorization.jpa.store.JPAResourceStore.findByOwner ( String  ownerId,
String  resourceServerId,
Consumer< Resource consumer 
)
inline

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

112  {
113  String queryName = "findResourceIdByOwner";
114 
115  if (resourceServerId == null) {
116  queryName = "findAnyResourceIdByOwner";
117  }
118 
119  TypedQuery<String> query = entityManager.createNamedQuery(queryName, String.class);
120 
121  query.setFlushMode(FlushModeType.COMMIT);
122  query.setParameter("owner", ownerId);
123 
124  if (resourceServerId != null) {
125  query.setParameter("serverId", resourceServerId);
126  }
127 
128  ResourceStore resourceStore = provider.getStoreFactory().getResourceStore();
129 
130  query.getResultList().stream()
131  .map(id -> resourceStore.findById(id, resourceServerId))
132  .filter(Objects::nonNull)
133  .forEach(consumer);
134  }
final EntityManager entityManager
Definition: JPAResourceStore.java:49
final AuthorizationProvider provider
Definition: JPAResourceStore.java:50
StoreFactory getStoreFactory()
Definition: AuthorizationProvider.java:109

◆ findByResourceServer() [1/2]

List<Resource> org.keycloak.authorization.jpa.store.JPAResourceStore.findByResourceServer ( String  resourceServerId)
inline

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

160  {
161  TypedQuery<String> query = entityManager.createNamedQuery("findResourceIdByServerId", String.class);
162 
163  query.setParameter("serverId", resourceServerId);
164 
165  List<String> result = query.getResultList();
166  List<Resource> list = new LinkedList<>();
167  ResourceStore resourceStore = provider.getStoreFactory().getResourceStore();
168 
169  for (String id : result) {
170  Resource resource = resourceStore.findById(id, resourceServerId);
171 
172  if (resource != null) {
173  list.add(resource);
174  }
175  }
176 
177  return list;
178  }
final EntityManager entityManager
Definition: JPAResourceStore.java:49
final AuthorizationProvider provider
Definition: JPAResourceStore.java:50
StoreFactory getStoreFactory()
Definition: AuthorizationProvider.java:109
Resource findById(String id, String resourceServerId)

◆ findByResourceServer() [2/2]

List<Resource> org.keycloak.authorization.jpa.store.JPAResourceStore.findByResourceServer ( Map< String, String[]>  attributes,
String  resourceServerId,
int  firstResult,
int  maxResult 
)
inline

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

181  {
182  CriteriaBuilder builder = entityManager.getCriteriaBuilder();
183  CriteriaQuery<ResourceEntity> querybuilder = builder.createQuery(ResourceEntity.class);
184  Root<ResourceEntity> root = querybuilder.from(ResourceEntity.class);
185  querybuilder.select(root.get("id"));
186  List<Predicate> predicates = new ArrayList();
187 
188  if (resourceServerId != null) {
189  predicates.add(builder.equal(root.get("resourceServer").get("id"), resourceServerId));
190  }
191 
192  attributes.forEach((name, value) -> {
193  if ("id".equals(name)) {
194  predicates.add(root.get(name).in(value));
195  } else if ("scope".equals(name)) {
196  predicates.add(root.join("scopes").get("id").in(value));
197  } else if ("ownerManagedAccess".equals(name)) {
198  predicates.add(builder.equal(root.get(name), Boolean.valueOf(value[0])));
199  } else if ("uri".equals(name)) {
200  predicates.add(builder.lower(root.join("uris")).in(value[0].toLowerCase()));
201  } else if ("uri_not_null".equals(name)) {
202  // predicates.add(builder.isNotEmpty(root.get("uris"))); looks like there is a bug in hibernate and this line doesn't work: https://hibernate.atlassian.net/browse/HHH-6686
203  // Workaround
204  Expression<Integer> urisSize = builder.size(root.get("uris"));
205  predicates.add(builder.notEqual(urisSize, 0));
206  } else if ("owner".equals(name)) {
207  predicates.add(root.get(name).in(value));
208  } else {
209  predicates.add(builder.like(builder.lower(root.get(name)), "%" + value[0].toLowerCase() + "%"));
210  }
211  });
212 
213  querybuilder.where(predicates.toArray(new Predicate[predicates.size()])).orderBy(builder.asc(root.get("name")));
214 
215  Query query = entityManager.createQuery(querybuilder);
216 
217  if (firstResult != -1) {
218  query.setFirstResult(firstResult);
219  }
220  if (maxResult != -1) {
221  query.setMaxResults(maxResult);
222  }
223 
224  List<String> result = query.getResultList();
225  List<Resource> list = new LinkedList<>();
226  ResourceStore resourceStore = provider.getStoreFactory().getResourceStore();
227 
228  for (String id : result) {
229  Resource resource = resourceStore.findById(id, resourceServerId);
230 
231  if (resource != null) {
232  list.add(resource);
233  }
234  }
235 
236  return list;
237  }
final EntityManager entityManager
Definition: JPAResourceStore.java:49
final AuthorizationProvider provider
Definition: JPAResourceStore.java:50
StoreFactory getStoreFactory()
Definition: AuthorizationProvider.java:109
Resource findById(String id, String resourceServerId)

◆ findByScope() [1/2]

List<Resource> org.keycloak.authorization.jpa.store.JPAResourceStore.findByScope ( List< String >  scopes,
String  resourceServerId 
)
inline

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

240  {
241  List<Resource> result = new ArrayList<>();
242 
243  findByScope(scopes, resourceServerId, result::add);
244 
245  return result;
246  }
List< Resource > findByScope(List< String > scopes, String resourceServerId)
Definition: JPAResourceStore.java:240

◆ findByScope() [2/2]

void org.keycloak.authorization.jpa.store.JPAResourceStore.findByScope ( List< String >  scopes,
String  resourceServerId,
Consumer< Resource consumer 
)
inline

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

249  {
250  TypedQuery<String> query = entityManager.createNamedQuery("findResourceIdByScope", String.class);
251 
252  query.setFlushMode(FlushModeType.COMMIT);
253  query.setParameter("scopeIds", scopes);
254  query.setParameter("serverId", resourceServerId);
255 
256  ResourceStore resourceStore = provider.getStoreFactory().getResourceStore();
257 
258  query.getResultList().stream()
259  .map(id -> resourceStore.findById(id, resourceServerId))
260  .filter(Objects::nonNull)
261  .forEach(consumer);
262  }
final EntityManager entityManager
Definition: JPAResourceStore.java:49
final AuthorizationProvider provider
Definition: JPAResourceStore.java:50
StoreFactory getStoreFactory()
Definition: AuthorizationProvider.java:109

◆ findByType() [1/2]

List<Resource> org.keycloak.authorization.jpa.store.JPAResourceStore.findByType ( String  type,
String  resourceServerId 
)
inline

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

287  {
288  List<Resource> list = new LinkedList<>();
289 
290  findByType(type, resourceServerId, list::add);
291 
292  return list;
293  }
List< Resource > findByType(String type, String resourceServerId)
Definition: JPAResourceStore.java:287

◆ findByType() [2/2]

void org.keycloak.authorization.jpa.store.JPAResourceStore.findByType ( String  type,
String  resourceServerId,
Consumer< Resource consumer 
)
inline

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

296  {
297  TypedQuery<String> query = entityManager.createNamedQuery("findResourceIdByType", String.class);
298 
299  query.setFlushMode(FlushModeType.COMMIT);
300  query.setParameter("type", type);
301  query.setParameter("ownerId", resourceServerId);
302  query.setParameter("serverId", resourceServerId);
303 
304  ResourceStore resourceStore = provider.getStoreFactory().getResourceStore();
305 
306  query.getResultList().stream()
307  .map(id -> resourceStore.findById(id, resourceServerId))
308  .filter(Objects::nonNull)
309  .forEach(consumer);
310  }
final EntityManager entityManager
Definition: JPAResourceStore.java:49
final AuthorizationProvider provider
Definition: JPAResourceStore.java:50
StoreFactory getStoreFactory()
Definition: AuthorizationProvider.java:109

◆ findByUri()

List<Resource> org.keycloak.authorization.jpa.store.JPAResourceStore.findByUri ( String  uri,
String  resourceServerId 
)
inline

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

137  {
138  TypedQuery<String> query = entityManager.createNamedQuery("findResourceIdByUri", String.class);
139 
140  query.setFlushMode(FlushModeType.COMMIT);
141  query.setParameter("uri", uri);
142  query.setParameter("serverId", resourceServerId);
143 
144  List<String> result = query.getResultList();
145  List<Resource> list = new LinkedList<>();
146  ResourceStore resourceStore = provider.getStoreFactory().getResourceStore();
147 
148  for (String id : result) {
149  Resource resource = resourceStore.findById(id, resourceServerId);
150 
151  if (resource != null) {
152  list.add(resource);
153  }
154  }
155 
156  return list;
157  }
final EntityManager entityManager
Definition: JPAResourceStore.java:49
final AuthorizationProvider provider
Definition: JPAResourceStore.java:50
StoreFactory getStoreFactory()
Definition: AuthorizationProvider.java:109
Resource findById(String id, String resourceServerId)

メンバ詳解

◆ entityManager

final EntityManager org.keycloak.authorization.jpa.store.JPAResourceStore.entityManager
private

◆ provider

final AuthorizationProvider org.keycloak.authorization.jpa.store.JPAResourceStore.provider
private

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