Class PolicyContext
- java.lang.Object
-
- javax.security.jacc.PolicyContext
-
public final class PolicyContext extends java.lang.ObjectThis utility class is used by containers to communicate policy context identifiers and other policy relevant context to
Policyproviders.Policyproviders use the policy context identifier to select the subset of policy to apply in access decisions.The value of a policy context identifier is a
Stringand each thread has an independently established policy context identifier. A container will establish the thread-scoped value of a policy context identifier by calling the staticsetContextIDmethod. The value of a thread-scoped policy context identifier is available (toPolicy) by calling the staticgetContextIDmethod.This class is also used by
Policyproviders to request additional thread-scoped policy relevant context objects from the calling container. Containers register container-specificPolicyContexthandlers using the staticregisterHandlermethod. Handler registration is scoped to the class, such that the same handler registrations are active in all thread contexts. Containers may use the static methodsetHandlerDatato establish a thread-scoped parameter that will be passed to handlers when they are activated byPolicyproviders. The staticgetContextmethod is used to activate a handler and obtain the corresponding context object.The static accessor functions provided by this class allow per-thread policy context values to be established and communicated independent of a common reference to a particular
PolicyContextinstance.The
PolicyContextclass may encapsulate staticThreadLocalinstance variables to represent the policy context identifier and handler data values.The Application server must bundle or install the
PolicyContextclass, and the containers of the application server must prevent the methods of thePolicyContextclass from being called from calling contexts that are not authorized to call these methods. With the exception of thegetContextIDandgetHandlerKeysmethods, containers must restrict and afford access to the methods of thePolicyContextclass to calling contexts trusted by the container to perform container access decisions. ThePolicyContextclass may satisfy this requirement (on behalf of its container) by rejecting calls made from anAccessControlContextthat has not been granted the "setPolicy" SecurityPermission, and by ensuring thatPolicyproviders used to perform container access decisions are granted the "setPolicy" permission.- See Also:
PolicyContextHandler
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.ThreadLocal<java.lang.String>contextIDLocalprivate static java.security.SecurityPermissiongetPolicyprivate static java.lang.ThreadLocal<java.lang.Object>handlerDataLocalprivate static java.util.Map<java.lang.String,PolicyContextHandler>handlerMapprivate static java.security.SecurityPermissionsetPolicy
-
Constructor Summary
Constructors Modifier Constructor Description privatePolicyContext()Private constructor.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.lang.ObjectgetContext(java.lang.String key)This method may be used by aPolicyprovider to activate thePolicyContextHandlerregistered to the context object key and cause it to return the corresponding policy context object from the container.static java.lang.StringgetContextID()This static method returns the value of the policy context identifier associated with the thread on which the accessor is called.static java.util.SetgetHandlerKeys()This method may be used to obtain the keys that identify the container specific context handlers registered by the container.static voidregisterHandler(java.lang.String key, PolicyContextHandler handler, boolean replace)Authorization protected method used to register a container specificPolicyContexthandler.static voidsetContextID(java.lang.String contextID)Authorization protected method used to modify the value of the policy context identifier associated with the thread on which this method is called.static voidsetHandlerData(java.lang.Object data)Authorization protected method that may be used to associate a thread-scoped handler data object with the PolicyContext.
-
-
-
Field Detail
-
setPolicy
private static java.security.SecurityPermission setPolicy
-
getPolicy
private static java.security.SecurityPermission getPolicy
-
handlerDataLocal
private static java.lang.ThreadLocal<java.lang.Object> handlerDataLocal
-
contextIDLocal
private static java.lang.ThreadLocal<java.lang.String> contextIDLocal
-
handlerMap
private static java.util.Map<java.lang.String,PolicyContextHandler> handlerMap
-
-
Method Detail
-
getContext
public static java.lang.Object getContext(java.lang.String key) throws PolicyContextExceptionThis method may be used by a
Policyprovider to activate thePolicyContextHandlerregistered to the context object key and cause it to return the corresponding policy context object from the container. When this method activates a handler, it passes to the handler the context object key and the handler data associated with the calling thread.- Parameters:
key- - aStringthat identifies the PolicyContextHandler to activate and the context object to be acquired from the handler. The value of this parameter must not be null.- Returns:
- the container and handler specific object containing the desired context. A
nullvalue is returned if the corresponding handler has been registered, and the value of the corresponding context is null. - Throws:
java.lang.IllegalArgumentException- - if aPolicyContextHandlerhas not been registered for the key or the registered handler no longer supports the key.java.lang.SecurityException- - if the callingAccessControlContextis not authorized by the container to call this method.PolicyContextException- - if an operation by this method on the identifiedPolicyContextHandlercauses it to throw a checked exception that is not accounted for in the signature of this method.
-
getContextID
public static java.lang.String getContextID()
This static method returns the value of the policy context identifier associated with the thread on which the accessor is called.
- Returns:
- The
String(ornull) policy context identifier established for the thread. This method must return the default policy context identifier,null, if the policy context identifier of the thread has not been set viasetContextto another value. - Throws:
java.lang.SecurityException- - if the callingAccessControlContextis not authorized by the container to call this method. Containers may choose to authorize calls to this method by anyAccessControlContext.
-
getHandlerKeys
public static java.util.Set getHandlerKeys()
This method may be used to obtain the keys that identify the container specific context handlers registered by the container.
- Returns:
- A
Set, the elements of which, are theStringkey values that identify the handlers that have been registered and therefore may be activated on thePolicyContext. - Throws:
java.lang.SecurityException- - if the callingAccessControlContextis not authorized by the container to call this method. Containers may choose to authorize calls to this methods by anyAccessControlContext.
-
registerHandler
public static void registerHandler(java.lang.String key, PolicyContextHandler handler, boolean replace) throws PolicyContextExceptionAuthorization protected method used to register a container specific
PolicyContexthandler. A handler may be registered to handle multiple keys, but at any time, at most one handler may be registered for a key.- Parameters:
key- - a (case-sensitive)Stringthat identifies the context object handled by the handler. The value of this parameter must not be null.handler- - an object that implements thePolicyContextHandlerinterface. The value of this parameter must not be null.replace- - this boolean value defines the behavior of this method if, when it is called, aPolicyContextHandlerhas already been registered to handle the same key. In that case, and if the value of this argument istrue, the existing handler is replaced with the argument handler. If the value of this parameter is false the existing registration is preserved and an exception is thrown.- Throws:
java.lang.IllegalArgumentException- - if the value of either of the handler or key arguments is null, or the value of the replace argument is false and a handler with the same key as the argument handler is already registered.java.lang.SecurityException- - if the callingAccessControlContextis not authorized by the container to call this method.PolicyContextException- - if an operation by this method on the argumentPolicyContextHandlercauses it to throw a checked exception that is not accounted for in the signature of this method.
-
setContextID
public static void setContextID(java.lang.String contextID)
Authorization protected method used to modify the value of the policy context identifier associated with the thread on which this method is called.
- Parameters:
contextID- - aStringthat represents the value of the policy context identifier to be assigned to thePolicyContextfor the calling thread. The value null is a legitimate value for this parameter.- Throws:
java.lang.SecurityException- - if the callingAccessControlContextis not authorized by the container to call this method.
-
setHandlerData
public static void setHandlerData(java.lang.Object data)
Authorization protected method that may be used to associate a thread-scoped handler data object with the PolicyContext. The handler data object will be made available to handlers, where it can serve to supply or bind the handler to invocation scoped state within the container.
- Parameters:
data- - a container-specific object that will be associated with the calling thread and passed to any handler activated by aPolicyprovider (on the thread). The value null is a legitimate value for this parameter, and is the value that will be used in the activation of handlers if thesetHandlerDatahas not been called on the thread.- Throws:
java.lang.SecurityException- - if the callingAccessControlContextis not authorized by the container to call this method.
-
-