org.apache.commons.jexl3.introspection
Class JexlSandbox

java.lang.Object
  extended by org.apache.commons.jexl3.introspection.JexlSandbox

public final class JexlSandbox
extends Object

A sandbox describes permissions on a class by explicitly allowing or forbidding access to methods and properties through "whitelists" and "blacklists".

A whitelist explicitly allows methods/properties for a class;

A blacklist explicitly forbids methods/properties for a class;

Permissions are composed of three lists, read, write, execute, each being "white" or "black":

Note that a JexlUberspect always uses a copy of the JexlSandbox used to built it to avoid synchronization and/or concurrent modifications at runtime.

Since:
3.0

Nested Class Summary
static class JexlSandbox.BlackSet
          A black set of names.
static class JexlSandbox.Names
          A base set of names.
static class JexlSandbox.Permissions
          Contains the white or black lists for properties and methods for a given class.
static class JexlSandbox.WhiteSet
          A white set of names.
 
Constructor Summary
  JexlSandbox()
          Creates a new default sandbox.
  JexlSandbox(boolean wb)
          Creates a new default sandbox.
protected JexlSandbox(boolean wb, Map<String,JexlSandbox.Permissions> map)
          Creates a sandbox based on an existing permissions map.
protected JexlSandbox(Map<String,JexlSandbox.Permissions> map)
          Creates a sandbox based on an existing permissions map.
 
Method Summary
 JexlSandbox.Permissions black(String clazz)
          Creates a new set of permissions based on black lists for methods and properties for a given class.
 JexlSandbox copy()
           
 String execute(Class<?> clazz, String name)
          Gets the execute permission value for a given method of a class.
 String execute(String clazz, String name)
          Gets the execute permission value for a given method of a class.
 JexlSandbox.Permissions get(String clazz)
          Gets the set of permissions associated to a class.
 JexlSandbox.Permissions permissions(String clazz, boolean readFlag, boolean writeFlag, boolean executeFlag)
          Creates the set of permissions for a given class.
 String read(Class<?> clazz, String name)
          Gets the read permission value for a given property of a class.
 String read(String clazz, String name)
          Gets the read permission value for a given property of a class.
 JexlSandbox.Permissions white(String clazz)
          Creates a new set of permissions based on white lists for methods and properties for a given class.
 String write(Class<?> clazz, String name)
          Gets the write permission value for a given property of a class.
 String write(String clazz, String name)
          Gets the write permission value for a given property of a class.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JexlSandbox

public JexlSandbox()
Creates a new default sandbox.

In the absence of explicit permissions on a class, the sandbox is a white-box, white-listing that class for all permissions (read, write and execute).


JexlSandbox

public JexlSandbox(boolean wb)
Creates a new default sandbox.

A white-box considers no permissions as "everything is allowed" when a black-box considers no permissions as "nothing is allowed".

Parameters:
wb - whether this sandbox is white (true) or black (false) if no permission is explicitly defined for a class.
Since:
3.1

JexlSandbox

protected JexlSandbox(Map<String,JexlSandbox.Permissions> map)
Creates a sandbox based on an existing permissions map.

Parameters:
map - the permissions map

JexlSandbox

protected JexlSandbox(boolean wb,
                      Map<String,JexlSandbox.Permissions> map)
Creates a sandbox based on an existing permissions map.

Parameters:
wb - whether this sandbox is white (true) or black (false)
map - the permissions map
Since:
3.1
Method Detail

copy

public JexlSandbox copy()
Returns:
a copy of this sandbox

read

public String read(Class<?> clazz,
                   String name)
Gets the read permission value for a given property of a class.

Parameters:
clazz - the class
name - the property name
Returns:
null if not allowed, the name of the property to use otherwise

read

public String read(String clazz,
                   String name)
Gets the read permission value for a given property of a class.

Parameters:
clazz - the class name
name - the property name
Returns:
null if not allowed, the name of the property to use otherwise

write

public String write(Class<?> clazz,
                    String name)
Gets the write permission value for a given property of a class.

Parameters:
clazz - the class
name - the property name
Returns:
null if not allowed, the name of the property to use otherwise

write

public String write(String clazz,
                    String name)
Gets the write permission value for a given property of a class.

Parameters:
clazz - the class name
name - the property name
Returns:
null if not allowed, the name of the property to use otherwise

execute

public String execute(Class<?> clazz,
                      String name)
Gets the execute permission value for a given method of a class.

Parameters:
clazz - the class
name - the method name
Returns:
null if not allowed, the name of the method to use otherwise

execute

public String execute(String clazz,
                      String name)
Gets the execute permission value for a given method of a class.

Parameters:
clazz - the class name
name - the method name
Returns:
null if not allowed, the name of the method to use otherwise

permissions

public JexlSandbox.Permissions permissions(String clazz,
                                           boolean readFlag,
                                           boolean writeFlag,
                                           boolean executeFlag)
Creates the set of permissions for a given class.

Parameters:
clazz - the class for which these permissions apply
readFlag - whether the readable property list is white - true - or black - false -
writeFlag - whether the writable property list is white - true - or black - false -
executeFlag - whether the executable method list is white white - true - or black - false -
Returns:
the set of permissions

white

public JexlSandbox.Permissions white(String clazz)
Creates a new set of permissions based on white lists for methods and properties for a given class.

Parameters:
clazz - the whitened class name
Returns:
the permissions instance

black

public JexlSandbox.Permissions black(String clazz)
Creates a new set of permissions based on black lists for methods and properties for a given class.

Parameters:
clazz - the blackened class name
Returns:
the permissions instance

get

public JexlSandbox.Permissions get(String clazz)
Gets the set of permissions associated to a class.

Parameters:
clazz - the class name
Returns:
the defined permissions or an all-white permission instance if none were defined


Copyright © 2001–2017 The Apache Software Foundation. All rights reserved.