public class ConcurrentPolicyFile extends Policy implements ScalableNestedPolicy
Concurrent Policy implementation based on policy configuration URL's, it is intended to provide concurrent implies() for greatly improved throughput. Caching limits scalability and consumes shared memory, so no cache exists.
By default all River Policy implementations now utilise ConcurrentPolicyFile.
The default PolicyParser implementation recognises text files, consisting of clauses with the following syntax:keystore "some_keystore_url" [, "keystore_type"];
grant [SignedBy "signer_names"] [, CodeBase "URL"]
[, Principal [principal_class_name] "principal_name"]
[, Principal [principal_class_name] "principal_name"] ... {
permission permission_class_name [ "target_name" ] [, "action"]
[, SignedBy "signer_names"];
permission ...
};
The keystore clause specifies reference to a keystore, which is a
database of private keys and their associated digital certificates. The
keystore is used to look up the certificates of signers specified in the
grant entries of the file. The policy file can contain any number of
keystore entries which can appear at any ordinal position. However,
only the first successfully loaded keystore is used, others are ignored. The
keystore must be specified if some grant clause refers to a certificate's
alias. AllPermission, the domains to which a DENY clause
would apply will be a less privileged domain. For example a user could be
granted SocketPermission("*", "connect"), while a DENY clause might
list specific SocketPermission domains that are disallowed, where a DENY
clause has precedence over all GRANT clause Permissions except for AllPermission.
Policy.Parameters| Modifier and Type | Field and Description |
|---|---|
private static Permission |
ALL_PERMISSION |
private Comparator<Permission> |
comparator |
private PermissionGrant[] |
grantArray |
private static Guard |
guard |
private static String |
JAVA_SECURITY_POLICY
System property for dynamically added policy location.
|
private static ProtectionDomain |
myDomain |
private PermissionCollection |
myPermissions |
private PolicyParser |
parser |
private static String |
POLICY_URL_PREFIX
Prefix for numbered Policy locations specified in security.properties.
|
UNSUPPORTED_EMPTY_COLLECTION| Modifier | Constructor and Description |
|---|---|
|
ConcurrentPolicyFile()
Default constructor, equivalent to
ConcurrentPolicyFile(new DefaultPolicyParser()). |
protected |
ConcurrentPolicyFile(PolicyParser dpr,
Comparator<Permission> comp) |
private |
ConcurrentPolicyFile(PolicyParser dpr,
Comparator<Permission> comp,
PermissionGrant[] grants)
Constructor to allow for custom policy providers, for example a database
policy provider, can make administration simpler than traditional
policy files.
|
| Modifier and Type | Method and Description |
|---|---|
private static PermissionGrant[] |
check(PolicyParser parser)
All exceptions are thrown by this method during construction,
to avoid a finalizer attack from an overriding class attempting
to avoid the construction guard, catching the exception then calling
refresh from the finalizer to instantiate a complete policy.
|
private PermissionCollection |
convert(NavigableSet<Permission> permissions) |
private PermissionCollection |
getP(ProtectionDomain pd) |
List<PermissionGrant> |
getPermissionGrants(ProtectionDomain pd)
Returns a new List containing immutable PermissionGrant's, the
List returned is not synchronised and must not be shared with policy
internal state.
|
PermissionCollection |
getPermissions(CodeSource cs)
This returns a java.security.Permissions collection, which allows
ProtectionDomain to optimise for the AllPermission case, which avoids
unnecessarily consulting the policy.
|
PermissionCollection |
getPermissions(ProtectionDomain pd)
Returns collection of permissions allowed for the domain
according to the policy.
|
boolean |
implies(ProtectionDomain domain,
Permission permission) |
private static PermissionGrant[] |
initialize(PolicyParser parser) |
void |
refresh()
Gets fresh list of locations and tries to load all of them in sequence;
failed loads are ignored.
|
getInstance, getInstance, getInstance, getParameters, getPolicy, getProvider, getType, setPolicyprivate static final String JAVA_SECURITY_POLICY
private static final String POLICY_URL_PREFIX
private static final Permission ALL_PERMISSION
private volatile PermissionGrant[] grantArray
private final PolicyParser parser
private static final Guard guard
private static final ProtectionDomain myDomain
private final Comparator<Permission> comparator
private volatile PermissionCollection myPermissions
public ConcurrentPolicyFile()
throws PolicyInitializationException
ConcurrentPolicyFile(new DefaultPolicyParser()).PolicyInitializationExceptionprotected ConcurrentPolicyFile(PolicyParser dpr, Comparator<Permission> comp) throws PolicyInitializationException
PolicyInitializationExceptionprivate ConcurrentPolicyFile(PolicyParser dpr, Comparator<Permission> comp, PermissionGrant[] grants) throws PolicyInitializationException
dpr - comp - Comparator to compare permissions.PolicyInitializationExceptionprivate static PermissionGrant[] check(PolicyParser parser) throws PolicyInitializationException
PolicyInitializationExceptionprivate PermissionCollection convert(NavigableSet<Permission> permissions)
public PermissionCollection getPermissions(ProtectionDomain pd)
null if the domain is null.
Each PermissionCollection returned is a unique instance.getPermissions in class Policypd - ProtectionDomainProtectionDomainprivate PermissionCollection getP(ProtectionDomain pd)
public PermissionCollection getPermissions(CodeSource cs)
getPermissions in class Policycs - CodeSourceCodeSourcepublic boolean implies(ProtectionDomain domain, Permission permission)
public void refresh()
refresh in class PolicyPolicyUtils.getPolicyURLs(Properties, String, String)private static PermissionGrant[] initialize(PolicyParser parser) throws Exception
Exceptionpublic List<PermissionGrant> getPermissionGrants(ProtectionDomain pd)
ScalableNestedPolicygetPermissionGrants in interface ScalableNestedPolicyCopyright 2007-2013, multiple authors.
Licensed under the Apache License, Version 2.0, see the NOTICE file for attributions.