Class UserManagerImpl
- java.lang.Object
-
- org.apache.jackrabbit.core.ProtectedItemModifier
-
- org.apache.jackrabbit.core.security.user.UserManagerImpl
-
- All Implemented Interfaces:
UserManager,SessionListener
- Direct Known Subclasses:
UserPerWorkspaceUserManager
public class UserManagerImpl extends ProtectedItemModifier implements UserManager, SessionListener
Implementation Characteristics
Default implementation of theUserManagerinterface with the following characteristics:- Users and Groups are stored in the repository as JCR nodes.
- Users are created below
UserConstants.USERS_PATH,
Groups are created belowUserConstants.GROUPS_PATH(unless otherwise configured). - The Id of an authorizable is stored in the jcr:uuid property (md5 hash).
- In order to structure the users and groups tree and avoid creating a flat
hierarchy, additional hierarchy nodes of type "rep:AuthorizableFolder" are
introduced using
- the specified intermediate path passed to the create methods
- or some built-in logic if the intermediate path is missing.
Authorizable Creation
The built-in logic applies the following rules:- The names of the hierarchy folders is determined from ID of the
authorizable to be created, consisting of the leading N chars where N is
the relative depth starting from the node at
getUsersPath()orgetGroupsPath(). - By default 2 levels (depth == 2) are created.
- Parent nodes are expected to consist of folder structure only.
- If the ID contains invalid JCR chars that would prevent the creation of
a Node with that name, the names of authorizable node and the intermediate
hierarchy nodes are
escaped.
+ rep:security [nt:unstructured] + rep:authorizables [rep:AuthorizableFolder] + rep:users [rep:AuthorizableFolder] + a [rep:AuthorizableFolder] + aS [rep:AuthorizableFolder] + aSmith [rep:User]Creating a non-existing user with ID 'aSmith' specifying an intermediate path 'some/tree' would result in the following structure:+ rep:security [nt:unstructured] + rep:authorizables [rep:AuthorizableFolder] + rep:users [rep:AuthorizableFolder] + some [rep:AuthorizableFolder] + tree [rep:AuthorizableFolder] + aSmith [rep:User]Configuration
ThisUserManageris able to handle the following configuration options:Configuration Parameters
PARAM_USERS_PATH: Defines where user nodes are created. If missing set toUSERS_PATH.PARAM_GROUPS_PATH. Defines where group nodes are created. If missing set toGROUPS_PATH.PARAM_COMPATIBLE_JR16: If the param is present and its value istruelooking up authorizables by ID will use theNodeResolverif not found otherwise.
If the parameter is missing (or false) users and groups created with a Jackrabbit repository < v2.0 will not be found any more.
By default this option is disabled.PARAM_DEFAULT_DEPTH: Parameter used to change the number of levels that are used by default to store authorizable nodes.
The value is expected to be a positive integer greater than zero. The default number of levels is 2.PARAM_AUTO_EXPAND_TREE: If this parameter is present and its value istrue, the trees containing user and group nodes will automatically created additional hierarchy levels if the number of nodes on a given level exceeds the maximal allowedsize.
By default this option is disabled.PARAM_AUTO_EXPAND_SIZE: This parameter only takes effect ifPARAM_AUTO_EXPAND_TREEis enabled.
The value is expected to be a positive long greater than zero. The default value is 1000.PARAM_GROUP_MEMBERSHIP_SPLIT_SIZE: If this parameter is present group memberships are collected in a node structure belowUserConstants.N_MEMBERSinstead of the default multi valued propertyUserConstants.P_MEMBERS. Its value determines the maximum number of member properties until additional intermediate nodes are inserted. Valid parameter values are integers > 4.PARAM_PASSWORD_HASH_ALGORITHM: Optional parameter to configure the algorithm used for password hash generation. The default value isPasswordUtility.DEFAULT_ALGORITHM.PARAM_PASSWORD_HASH_ITERATIONS: Optional parameter to configure the number of iterations used for password hash generations. The default value isPasswordUtility.DEFAULT_ITERATIONS.
Authorizable Actions
In addition to the specified configuration parameters this user manager implementation allows to define zero to manyAuthorizableActions. Authorizable actions provide the ability to execute additional validation or tasks upon authorizable creation, removal and upon changing a users password.
See alsoUserManagerConfig.getAuthorizableActions()
-
-
Field Summary
Fields Modifier and Type Field Description static StringAUTHORIZABLES_PATHstatic StringGROUP_ADMIN_GROUP_NAMEConfiguration key and default value for the the name of the 'GroupAdmin' group-principalstatic StringGROUPS_PATHstatic NameMIX_REP_IMPERSONATABLEstatic NameN_MEMBERSstatic NameFactoryNFstatic NameNT_REP_AUTHORIZABLEstatic NameNT_REP_AUTHORIZABLE_FOLDERstatic NameNT_REP_GROUPstatic NameNT_REP_MEMBERSstatic NameNT_REP_USERstatic NameP_DISABLEDstatic NameP_GROUPSDeprecated.As of 2.0 group membership is stored with the group node.static NameP_IMPERSONATORSName of the user property containing the principal names of those allowed to impersonate.static NameP_MEMBERSstatic NameP_PASSWORDstatic NameP_PRINCIPAL_NAMEstatic NameP_USERIDDeprecated.As of 2.0 the id-hash is stored with the jcr:uuid making the rep:userId property redundant.static StringPARAM_AUTO_EXPAND_SIZEThis parameter only takes effect ifPARAM_AUTO_EXPAND_TREEis enabled.
The default value is 1000.static StringPARAM_AUTO_EXPAND_TREEIf this parameter is present and its value istrue, the trees containing user and group nodes will automatically created additional hierarchy levels if the number of nodes on a given level exceeds the maximal allowedsize.static StringPARAM_COMPATIBILE_JR16Deprecated.UsePARAM_COMPATIBLE_JR16instead.static StringPARAM_COMPATIBLE_JR16Flag to enable a minimal backwards compatibility with Jackrabbit < v2.0
If the param is present and its value istruelooking up authorizables by ID will use theNodeResolverif not found otherwise.
If the parameter is missing (or false) users and groups created with a Jackrabbit repository < v2.0 will not be found any more.
By default this option is disabled.static StringPARAM_DEFAULT_DEPTHParameter used to change the number of levels that are used by default store authorizable nodes.
The default number of levels is 2.static StringPARAM_GROUP_MEMBERSHIP_SPLIT_SIZEIf this parameter is present group members are collected in a node structure belowUserConstants.N_MEMBERSinstead of the default multi valued propertyUserConstants.P_MEMBERS.static StringPARAM_GROUPS_PATHConfiguration option to change thedefault pathfor creating groups.static StringPARAM_PASSWORD_HASH_ALGORITHMConfiguration parameter to change the default algorithm used to generate password hashes.static StringPARAM_PASSWORD_HASH_ITERATIONSConfiguration parameter to change the number of iterations used for password hash generation.static StringPARAM_USERS_PATHConfiguration option to change thedefault pathfor creating users.static StringSECURITY_ROOT_PATHroot-path to security related content e.g.static StringUSER_ADMIN_GROUP_NAMEConfiguration key and default value for the the name of the 'UserAdmin' group-principal.static StringUSERS_PATH-
Fields inherited from interface org.apache.jackrabbit.api.security.user.UserManager
SEARCH_TYPE_AUTHORIZABLE, SEARCH_TYPE_GROUP, SEARCH_TYPE_USER
-
-
Constructor Summary
Constructors Constructor Description UserManagerImpl(SessionImpl session, String adminId)Create a newUserManagerwith the default configuration.UserManagerImpl(SessionImpl session, String adminId, Properties config)Create a newUserManagerUserManagerImpl(SessionImpl session, String adminId, Properties config, MembershipCache mCache)Create a newUserManagerfor the givensession.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidautoSave(boolean enable)Always throwsunsupportedRepositoryOperationExceptionas modification of the autosave behavior is not supported.GroupcreateGroup(String groupID)GroupcreateGroup(String groupID, Principal principal, String intermediatePath)Create a newGroupfrom the givengroupIDandprincipal.GroupcreateGroup(Principal principal)Same ascreateGroup(java.security.Principal, String)where the intermediate path isnull.GroupcreateGroup(Principal principal, String intermediatePath)Same ascreateGroup(String, Principal, String)where a groupID is generated from the principal name.UsercreateSystemUser(String userID, String intermediatePath)UsercreateUser(String userID, String password)UsercreateUser(String userID, String password, Principal principal, String intermediatePath)protected GroupdoCreateGroup(NodeImpl node)Build the group object from the given group node.protected UserdoCreateUser(NodeImpl node)Build the user object from the given user node.Iterator<Authorizable>findAuthorizables(String relPath, String value)Iterator<Authorizable>findAuthorizables(String relPath, String value, int searchType)Iterator<Authorizable>findAuthorizables(Query query)AuthorizablegetAuthorizable(String id)<T extends Authorizable>
TgetAuthorizable(String id, Class<T> authorizableClass)AuthorizablegetAuthorizable(Principal principal)AuthorizablegetAuthorizableByPath(String path)Always throwsUnsupportedRepositoryOperationExceptionsince this implementation of the user management API does not allow to retrieve the path of an authorizable.StringgetGroupsPath()Implementation specific methods revealing where groups are created within the content.MembershipCachegetMembershipCache()intgetMemberSplitSize()Maximum number of properties on the group membership node structure underUserConstants.N_MEMBERSuntil additional intermediate nodes are inserted.StringgetUsersPath()Implementation specific methods revealing where users are created within the content.booleanhasMemberSplitSize()Returnstrueif the split-member configuration parameter is greater or equal than 4 indicating that group members should be stored in a tree instead of a single multivalued property.booleanisAutoSave()Always returnstrueas by default the autoSave behavior cannot be altered (see alsoautoSave(boolean).voidloggedOut(SessionImpl session)Called when aSessionhas been 'closed' by calling.Session.logout()voidloggingOut(SessionImpl session)Called when aSessionis about to be 'closed' by calling.Session.logout()voidsetAuthorizableActions(AuthorizableAction[] authorizableActions)Set the authorizable actions that will be invoked upon authorizable creation and removal.-
Methods inherited from class org.apache.jackrabbit.core.ProtectedItemModifier
addNode, addNode, markModified, performProtected, removeItem, setProperty, setProperty, setProperty, setProperty
-
-
-
-
Field Detail
-
PARAM_USERS_PATH
public static final String PARAM_USERS_PATH
Configuration option to change thedefault pathfor creating users.- See Also:
- Constant Field Values
-
PARAM_GROUPS_PATH
public static final String PARAM_GROUPS_PATH
Configuration option to change thedefault pathfor creating groups.- See Also:
- Constant Field Values
-
PARAM_COMPATIBILE_JR16
@Deprecated public static final String PARAM_COMPATIBILE_JR16
Deprecated.UsePARAM_COMPATIBLE_JR16instead.- See Also:
- Constant Field Values
-
PARAM_COMPATIBLE_JR16
public static final String PARAM_COMPATIBLE_JR16
Flag to enable a minimal backwards compatibility with Jackrabbit < v2.0
If the param is present and its value istruelooking up authorizables by ID will use theNodeResolverif not found otherwise.
If the parameter is missing (or false) users and groups created with a Jackrabbit repository < v2.0 will not be found any more.
By default this option is disabled.- See Also:
- Constant Field Values
-
PARAM_DEFAULT_DEPTH
public static final String PARAM_DEFAULT_DEPTH
Parameter used to change the number of levels that are used by default store authorizable nodes.
The default number of levels is 2.NOTE: Changing the default depth once users and groups have been created in the repository will cause inconsistencies, due to the fact that the resolution of ID to an authorizable relies on the structure defined by the default depth.
It is recommended to remove all authorizable nodes that will not be reachable any more, before this config option is changed.- If default depth is increased:
All authorizables on levels < default depth are not reachable any more. - If default depth is decreased:
All authorizables on levels > default depth aren't reachable any more unless thePARAM_AUTO_EXPAND_TREEflag is set totrue.
- See Also:
- Constant Field Values
- If default depth is increased:
-
PARAM_AUTO_EXPAND_TREE
public static final String PARAM_AUTO_EXPAND_TREE
If this parameter is present and its value istrue, the trees containing user and group nodes will automatically created additional hierarchy levels if the number of nodes on a given level exceeds the maximal allowedsize.
By default this option is disabled.- See Also:
- Constant Field Values
-
PARAM_AUTO_EXPAND_SIZE
public static final String PARAM_AUTO_EXPAND_SIZE
This parameter only takes effect ifPARAM_AUTO_EXPAND_TREEis enabled.
The default value is 1000.- See Also:
- Constant Field Values
-
PARAM_GROUP_MEMBERSHIP_SPLIT_SIZE
public static final String PARAM_GROUP_MEMBERSHIP_SPLIT_SIZE
If this parameter is present group members are collected in a node structure belowUserConstants.N_MEMBERSinstead of the default multi valued propertyUserConstants.P_MEMBERS. Its value determines the maximum number of member properties until additional intermediate nodes are inserted. Valid values are integers > 4. The default value is 0 and indicates that theUserConstants.P_MEMBERSproperty is used to record group members.- See Also:
- Constant Field Values
-
PARAM_PASSWORD_HASH_ALGORITHM
public static final String PARAM_PASSWORD_HASH_ALGORITHM
Configuration parameter to change the default algorithm used to generate password hashes. The default value isPasswordUtility.DEFAULT_ALGORITHM.- See Also:
- Constant Field Values
-
PARAM_PASSWORD_HASH_ITERATIONS
public static final String PARAM_PASSWORD_HASH_ITERATIONS
Configuration parameter to change the number of iterations used for password hash generation. The default value isPasswordUtility.DEFAULT_ITERATIONS.- See Also:
- Constant Field Values
-
NF
public static final NameFactory NF
-
SECURITY_ROOT_PATH
public static final String SECURITY_ROOT_PATH
root-path to security related content e.g. principals- See Also:
- Constant Field Values
-
AUTHORIZABLES_PATH
public static final String AUTHORIZABLES_PATH
- See Also:
- Constant Field Values
-
USERS_PATH
public static final String USERS_PATH
- See Also:
- Constant Field Values
-
GROUPS_PATH
public static final String GROUPS_PATH
- See Also:
- Constant Field Values
-
USER_ADMIN_GROUP_NAME
public static final String USER_ADMIN_GROUP_NAME
Configuration key and default value for the the name of the 'UserAdmin' group-principal.- See Also:
- Constant Field Values
-
GROUP_ADMIN_GROUP_NAME
public static final String GROUP_ADMIN_GROUP_NAME
Configuration key and default value for the the name of the 'GroupAdmin' group-principal- See Also:
- Constant Field Values
-
P_PRINCIPAL_NAME
public static final Name P_PRINCIPAL_NAME
-
P_USERID
@Deprecated public static final Name P_USERID
Deprecated.As of 2.0 the id-hash is stored with the jcr:uuid making the rep:userId property redundant. It has been removed from the node type definition.
-
P_PASSWORD
public static final Name P_PASSWORD
-
P_DISABLED
public static final Name P_DISABLED
-
P_GROUPS
@Deprecated public static final Name P_GROUPS
Deprecated.As of 2.0 group membership is stored with the group node.- See Also:
P_MEMBERS
-
P_MEMBERS
public static final Name P_MEMBERS
-
N_MEMBERS
public static final Name N_MEMBERS
-
P_IMPERSONATORS
public static final Name P_IMPERSONATORS
Name of the user property containing the principal names of those allowed to impersonate.
-
NT_REP_AUTHORIZABLE
public static final Name NT_REP_AUTHORIZABLE
-
NT_REP_AUTHORIZABLE_FOLDER
public static final Name NT_REP_AUTHORIZABLE_FOLDER
-
NT_REP_USER
public static final Name NT_REP_USER
-
NT_REP_GROUP
public static final Name NT_REP_GROUP
-
NT_REP_MEMBERS
public static final Name NT_REP_MEMBERS
-
MIX_REP_IMPERSONATABLE
public static final Name MIX_REP_IMPERSONATABLE
-
-
Constructor Detail
-
UserManagerImpl
public UserManagerImpl(SessionImpl session, String adminId) throws RepositoryException
Create a newUserManagerwith the default configuration.- Parameters:
session- The editing/reading session.adminId- The user ID of the administrator.- Throws:
RepositoryException- If an error occurs.
-
UserManagerImpl
public UserManagerImpl(SessionImpl session, String adminId, Properties config) throws RepositoryException
Create a newUserManager- Parameters:
session- The editing/reading session.adminId- The user ID of the administrator.config- The configuration parameters.- Throws:
RepositoryException- If an error occurs.
-
UserManagerImpl
public UserManagerImpl(SessionImpl session, String adminId, Properties config, MembershipCache mCache) throws RepositoryException
Create a newUserManagerfor the givensession. Currently the following configuration options are respected:PARAM_USERS_PATH. If missing set toUserConstants.USERS_PATH.PARAM_GROUPS_PATH. If missing set toUserConstants.GROUPS_PATH.PARAM_DEFAULT_DEPTH. The default number of levels is 2.PARAM_AUTO_EXPAND_TREE. By default this option is disabled.PARAM_AUTO_EXPAND_SIZE. The default value is 1000.PARAM_GROUP_MEMBERSHIP_SPLIT_SIZE. The default is 0 which means useUserConstants.P_MEMBERS.
introductionfor details.- Parameters:
session- The editing/reading session.adminId- The user ID of the administrator.config- The configuration parameters.mCache- Shared membership cache.- Throws:
RepositoryException- If an error occurs.
-
-
Method Detail
-
getUsersPath
public String getUsersPath()
Implementation specific methods revealing where users are created within the content.- Returns:
- root path for user content.
- See Also:
For the corresponding configuration parameter.
-
getGroupsPath
public String getGroupsPath()
Implementation specific methods revealing where groups are created within the content.- Returns:
- root path for group content.
- See Also:
For the corresponding configuration parameter.
-
getMembershipCache
public MembershipCache getMembershipCache()
- Returns:
- The membership cache present with this user manager instance.
-
getMemberSplitSize
public int getMemberSplitSize()
Maximum number of properties on the group membership node structure underUserConstants.N_MEMBERSuntil additional intermediate nodes are inserted. If 0 (default),UserConstants.P_MEMBERSis used to record group memberships.- Returns:
- The maximum number of group members before splitting up the structure.
-
hasMemberSplitSize
public boolean hasMemberSplitSize()
Returnstrueif the split-member configuration parameter is greater or equal than 4 indicating that group members should be stored in a tree instead of a single multivalued property.- Returns:
- true if group members are being stored in a tree instead of a single multivalued property.
-
setAuthorizableActions
public void setAuthorizableActions(AuthorizableAction[] authorizableActions)
Set the authorizable actions that will be invoked upon authorizable creation and removal.- Parameters:
authorizableActions- An array of authorizable actions.
-
getAuthorizable
public Authorizable getAuthorizable(String id) throws RepositoryException
- Specified by:
getAuthorizablein interfaceUserManager- Throws:
RepositoryException- See Also:
UserManager.getAuthorizable(String)
-
getAuthorizable
public <T extends Authorizable> T getAuthorizable(String id, Class<T> authorizableClass) throws AuthorizableTypeException, RepositoryException
- Specified by:
getAuthorizablein interfaceUserManager- Throws:
AuthorizableTypeExceptionRepositoryException- See Also:
UserManager.getAuthorizable(String, Class)
-
getAuthorizable
public Authorizable getAuthorizable(Principal principal) throws RepositoryException
- Specified by:
getAuthorizablein interfaceUserManager- Throws:
RepositoryException- See Also:
UserManager.getAuthorizable(Principal)
-
getAuthorizableByPath
public Authorizable getAuthorizableByPath(String path) throws UnsupportedRepositoryOperationException, RepositoryException
Always throwsUnsupportedRepositoryOperationExceptionsince this implementation of the user management API does not allow to retrieve the path of an authorizable.- Specified by:
getAuthorizableByPathin interfaceUserManager- Throws:
UnsupportedRepositoryOperationExceptionRepositoryException- See Also:
UserManager.getAuthorizableByPath(String)
-
findAuthorizables
public Iterator<Authorizable> findAuthorizables(String relPath, String value) throws RepositoryException
- Specified by:
findAuthorizablesin interfaceUserManager- Throws:
RepositoryException- See Also:
UserManager.findAuthorizables(String,String)
-
findAuthorizables
public Iterator<Authorizable> findAuthorizables(String relPath, String value, int searchType) throws RepositoryException
- Specified by:
findAuthorizablesin interfaceUserManager- Throws:
RepositoryException- See Also:
UserManager.findAuthorizables(String,String, int)
-
findAuthorizables
public Iterator<Authorizable> findAuthorizables(Query query) throws RepositoryException
- Specified by:
findAuthorizablesin interfaceUserManager- Throws:
RepositoryException- See Also:
UserManager.findAuthorizables(Query)
-
createUser
public User createUser(String userID, String password) throws RepositoryException
- Specified by:
createUserin interfaceUserManager- Throws:
RepositoryException- See Also:
UserManager.createUser(String,String)
-
createUser
public User createUser(String userID, String password, Principal principal, String intermediatePath) throws AuthorizableExistsException, RepositoryException
- Specified by:
createUserin interfaceUserManager- Throws:
AuthorizableExistsExceptionRepositoryException- See Also:
UserManager.createUser(String, String, java.security.Principal, String)
-
createSystemUser
public User createSystemUser(String userID, String intermediatePath) throws AuthorizableExistsException, RepositoryException
- Specified by:
createSystemUserin interfaceUserManager- Throws:
AuthorizableExistsExceptionRepositoryException
-
createGroup
public Group createGroup(String groupID) throws AuthorizableExistsException, RepositoryException
- Specified by:
createGroupin interfaceUserManager- Throws:
AuthorizableExistsExceptionRepositoryException- See Also:
UserManager.createGroup(String)
-
createGroup
public Group createGroup(Principal principal) throws RepositoryException
Same ascreateGroup(java.security.Principal, String)where the intermediate path isnull.- Specified by:
createGroupin interfaceUserManager- Throws:
RepositoryException- See Also:
UserManager.createGroup(Principal)
-
createGroup
public Group createGroup(Principal principal, String intermediatePath) throws AuthorizableExistsException, RepositoryException
Same ascreateGroup(String, Principal, String)where a groupID is generated from the principal name. If the name conflicts with an existing authorizable ID (may happen in cases where principal name != ID) the principal name is expanded by a suffix; otherwise the resulting group ID equals the principal name.- Specified by:
createGroupin interfaceUserManager- Parameters:
principal- A principal that doesn't yet represent an existing user or group.intermediatePath- Is always ignored.- Returns:
- A new group.
- Throws:
AuthorizableExistsExceptionRepositoryException- See Also:
UserManager.createGroup(java.security.Principal, String)
-
createGroup
public Group createGroup(String groupID, Principal principal, String intermediatePath) throws AuthorizableExistsException, RepositoryException
Create a newGroupfrom the givengroupIDandprincipal. It will be created below the definedgroup path.
Non-existent elements of the Path will be created as nodes of typerep:AuthorizableFolder.- Specified by:
createGroupin interfaceUserManager- Parameters:
groupID- A groupID that hasn't been used before for another user or group.principal- A principal that doesn't yet represent an existing user or group.intermediatePath- Is always ignored.- Returns:
- A new group.
- Throws:
AuthorizableExistsExceptionRepositoryException- See Also:
UserManager.createGroup(String, java.security.Principal, String)
-
isAutoSave
public boolean isAutoSave()
Always returnstrueas by default the autoSave behavior cannot be altered (see alsoautoSave(boolean).- Specified by:
isAutoSavein interfaceUserManager- Returns:
- Always
true. - See Also:
UserManager.isAutoSave()
-
autoSave
public void autoSave(boolean enable) throws UnsupportedRepositoryOperationException, RepositoryExceptionAlways throwsunsupportedRepositoryOperationExceptionas modification of the autosave behavior is not supported.- Specified by:
autoSavein interfaceUserManager- Throws:
UnsupportedRepositoryOperationExceptionRepositoryException- See Also:
UserManager.autoSave(boolean)
-
doCreateUser
protected User doCreateUser(NodeImpl node) throws RepositoryException
Build the user object from the given user node. May be overridden to return a custom implementation.- Parameters:
node- user node- Returns:
- the user object
- Throws:
RepositoryException- if an error occurs
-
doCreateGroup
protected Group doCreateGroup(NodeImpl node) throws RepositoryException
Build the group object from the given group node. May be overridden to return a custom implementation.- Parameters:
node- group node- Returns:
- A group
- Throws:
RepositoryException- if an error occurs
-
loggingOut
public void loggingOut(SessionImpl session)
Description copied from interface:SessionListenerCalled when aSessionis about to be 'closed' by calling. At this moment the session is still valid.Session.logout()- Specified by:
loggingOutin interfaceSessionListener- Parameters:
session- theSessionthat is about to be 'closed'- See Also:
SessionListener.loggingOut(org.apache.jackrabbit.core.SessionImpl)
-
loggedOut
public void loggedOut(SessionImpl session)
Description copied from interface:SessionListenerCalled when aSessionhas been 'closed' by calling.Session.logout()- Specified by:
loggedOutin interfaceSessionListener- Parameters:
session- theSessionthat has been 'closed'- See Also:
SessionListener.loggedOut(org.apache.jackrabbit.core.SessionImpl)
-
-