Skip to content

Commit 8492836

Browse files
kumargupranu2502
authored andcommitted
[Java Agent] Implement protection domain caching
Signed-off-by: Gulshan <[email protected]>
1 parent 1ecaa7a commit 8492836

File tree

1 file changed

+17
-2
lines changed
  • libs/agent-sm/agent-policy/src/main/java/org/opensearch/secure_sm/policy

1 file changed

+17
-2
lines changed

libs/agent-sm/agent-policy/src/main/java/org/opensearch/secure_sm/policy/PolicyFile.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,15 @@
3131
import java.security.SecurityPermission;
3232
import java.security.cert.Certificate;
3333
import java.util.ArrayList;
34+
import java.util.Collections;
3435
import java.util.Enumeration;
3536
import java.util.List;
37+
import java.util.Map;
3638
import java.util.Optional;
3739
import java.util.PropertyPermission;
3840
import java.util.Set;
41+
import java.util.concurrent.ConcurrentHashMap;
42+
import java.util.function.Supplier;
3943

4044
@SuppressWarnings("removal")
4145
public class PolicyFile extends java.security.Policy {
@@ -180,7 +184,11 @@ public void refresh() {
180184

181185
@Override
182186
public boolean implies(ProtectionDomain pd, Permission p) {
183-
PermissionCollection pc = getPermissions(pd);
187+
if (pd == null || p == null) {
188+
return false;
189+
}
190+
191+
PermissionCollection pc = policyInfo.getOrCompute(pd, () -> getPermissions(pd));
184192
return pc != null && pc.implies(p);
185193
}
186194

@@ -308,10 +316,17 @@ public String toString() {
308316

309317
private static class PolicyInfo {
310318
final List<PolicyEntry> policyEntries;
319+
private final Map<ProtectionDomain, PermissionCollection> pdMapping;
311320

312321
PolicyInfo() {
313-
policyEntries = new ArrayList<>();
322+
policyEntries = Collections.synchronizedList(new ArrayList<PolicyEntry>());
323+
pdMapping = new ConcurrentHashMap<>();
314324
}
325+
326+
public PermissionCollection getOrCompute(ProtectionDomain pd, Supplier<PermissionCollection> computeFn) {
327+
return pdMapping.computeIfAbsent(pd, k -> computeFn.get());
328+
}
329+
315330
}
316331

317332
private static URL newURL(String spec) throws MalformedURLException, URISyntaxException {

0 commit comments

Comments
 (0)