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, setPolicy
private 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())
.PolicyInitializationException
protected ConcurrentPolicyFile(PolicyParser dpr, Comparator<Permission> comp) throws PolicyInitializationException
PolicyInitializationException
private ConcurrentPolicyFile(PolicyParser dpr, Comparator<Permission> comp, PermissionGrant[] grants) throws PolicyInitializationException
dpr
- comp
- Comparator to compare permissions.PolicyInitializationException
private static PermissionGrant[] check(PolicyParser parser) throws PolicyInitializationException
PolicyInitializationException
private 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 Policy
pd
- ProtectionDomainProtectionDomain
private PermissionCollection getP(ProtectionDomain pd)
public PermissionCollection getPermissions(CodeSource cs)
getPermissions
in class Policy
cs
- CodeSourceCodeSource
public boolean implies(ProtectionDomain domain, Permission permission)
public void refresh()
refresh
in class Policy
PolicyUtils.getPolicyURLs(Properties, String, String)
private static PermissionGrant[] initialize(PolicyParser parser) throws Exception
Exception
public List<PermissionGrant> getPermissionGrants(ProtectionDomain pd)
ScalableNestedPolicy
getPermissionGrants
in interface ScalableNestedPolicy
Copyright 2007-2013, multiple authors.
Licensed under the Apache License, Version 2.0, see the NOTICE file for attributions.