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 theUserManager
interface 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
ThisUserManager
is 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 istrue
looking up authorizables by ID will use theNodeResolver
if 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_TREE
is 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_MEMBERS
instead 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 manyAuthorizableAction
s. 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 String
AUTHORIZABLES_PATH
static String
GROUP_ADMIN_GROUP_NAME
Configuration key and default value for the the name of the 'GroupAdmin' group-principalstatic String
GROUPS_PATH
static Name
MIX_REP_IMPERSONATABLE
static Name
N_MEMBERS
static NameFactory
NF
static Name
NT_REP_AUTHORIZABLE
static Name
NT_REP_AUTHORIZABLE_FOLDER
static Name
NT_REP_GROUP
static Name
NT_REP_MEMBERS
static Name
NT_REP_USER
static Name
P_DISABLED
static Name
P_GROUPS
Deprecated.As of 2.0 group membership is stored with the group node.static Name
P_IMPERSONATORS
Name of the user property containing the principal names of those allowed to impersonate.static Name
P_MEMBERS
static Name
P_PASSWORD
static Name
P_PRINCIPAL_NAME
static Name
P_USERID
Deprecated.As of 2.0 the id-hash is stored with the jcr:uuid making the rep:userId property redundant.static String
PARAM_AUTO_EXPAND_SIZE
This parameter only takes effect ifPARAM_AUTO_EXPAND_TREE
is enabled.
The default value is 1000.static 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
.static String
PARAM_COMPATIBILE_JR16
Deprecated.UsePARAM_COMPATIBLE_JR16
instead.static String
PARAM_COMPATIBLE_JR16
Flag to enable a minimal backwards compatibility with Jackrabbit < v2.0
If the param is present and its value istrue
looking up authorizables by ID will use theNodeResolver
if 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 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.static String
PARAM_GROUP_MEMBERSHIP_SPLIT_SIZE
If this parameter is present group members are collected in a node structure belowUserConstants.N_MEMBERS
instead of the default multi valued propertyUserConstants.P_MEMBERS
.static String
PARAM_GROUPS_PATH
Configuration option to change thedefault path
for creating groups.static String
PARAM_PASSWORD_HASH_ALGORITHM
Configuration parameter to change the default algorithm used to generate password hashes.static String
PARAM_PASSWORD_HASH_ITERATIONS
Configuration parameter to change the number of iterations used for password hash generation.static String
PARAM_USERS_PATH
Configuration option to change thedefault path
for creating users.static String
SECURITY_ROOT_PATH
root-path to security related content e.g.static String
USER_ADMIN_GROUP_NAME
Configuration key and default value for the the name of the 'UserAdmin' group-principal.static String
USERS_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 newUserManager
with the default configuration.UserManagerImpl(SessionImpl session, String adminId, Properties config)
Create a newUserManager
UserManagerImpl(SessionImpl session, String adminId, Properties config, MembershipCache mCache)
Create a newUserManager
for the givensession
.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
autoSave(boolean enable)
Always throwsunsupportedRepositoryOperationException
as modification of the autosave behavior is not supported.Group
createGroup(String groupID)
Group
createGroup(String groupID, Principal principal, String intermediatePath)
Create a newGroup
from the givengroupID
andprincipal
.Group
createGroup(Principal principal)
Same ascreateGroup(java.security.Principal, String)
where the intermediate path isnull
.Group
createGroup(Principal principal, String intermediatePath)
Same ascreateGroup(String, Principal, String)
where a groupID is generated from the principal name.User
createSystemUser(String userID, String intermediatePath)
User
createUser(String userID, String password)
User
createUser(String userID, String password, Principal principal, String intermediatePath)
protected Group
doCreateGroup(NodeImpl node)
Build the group object from the given group node.protected User
doCreateUser(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)
Authorizable
getAuthorizable(String id)
<T extends Authorizable>
TgetAuthorizable(String id, Class<T> authorizableClass)
Authorizable
getAuthorizable(Principal principal)
Authorizable
getAuthorizableByPath(String path)
Always throwsUnsupportedRepositoryOperationException
since this implementation of the user management API does not allow to retrieve the path of an authorizable.String
getGroupsPath()
Implementation specific methods revealing where groups are created within the content.MembershipCache
getMembershipCache()
int
getMemberSplitSize()
Maximum number of properties on the group membership node structure underUserConstants.N_MEMBERS
until additional intermediate nodes are inserted.String
getUsersPath()
Implementation specific methods revealing where users are created within the content.boolean
hasMemberSplitSize()
Returnstrue
if 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.boolean
isAutoSave()
Always returnstrue
as by default the autoSave behavior cannot be altered (see alsoautoSave(boolean)
.void
loggedOut(SessionImpl session)
Called when aSession
has been 'closed' by calling
.Session.logout()
void
loggingOut(SessionImpl session)
Called when aSession
is about to be 'closed' by calling
.Session.logout()
void
setAuthorizableActions(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 path
for creating users.- See Also:
- Constant Field Values
-
PARAM_GROUPS_PATH
public static final String PARAM_GROUPS_PATH
Configuration option to change thedefault path
for creating groups.- See Also:
- Constant Field Values
-
PARAM_COMPATIBILE_JR16
@Deprecated public static final String PARAM_COMPATIBILE_JR16
Deprecated.UsePARAM_COMPATIBLE_JR16
instead.- 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 istrue
looking up authorizables by ID will use theNodeResolver
if 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_TREE
flag 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_TREE
is 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_MEMBERS
instead 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_MEMBERS
property 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 newUserManager
with 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 newUserManager
for 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
.
introduction
for 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_MEMBERS
until additional intermediate nodes are inserted. If 0 (default),UserConstants.P_MEMBERS
is used to record group memberships.- Returns:
- The maximum number of group members before splitting up the structure.
-
hasMemberSplitSize
public boolean hasMemberSplitSize()
Returnstrue
if 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:
getAuthorizable
in 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:
getAuthorizable
in interfaceUserManager
- Throws:
AuthorizableTypeException
RepositoryException
- See Also:
UserManager.getAuthorizable(String, Class)
-
getAuthorizable
public Authorizable getAuthorizable(Principal principal) throws RepositoryException
- Specified by:
getAuthorizable
in interfaceUserManager
- Throws:
RepositoryException
- See Also:
UserManager.getAuthorizable(Principal)
-
getAuthorizableByPath
public Authorizable getAuthorizableByPath(String path) throws UnsupportedRepositoryOperationException, RepositoryException
Always throwsUnsupportedRepositoryOperationException
since this implementation of the user management API does not allow to retrieve the path of an authorizable.- Specified by:
getAuthorizableByPath
in interfaceUserManager
- Throws:
UnsupportedRepositoryOperationException
RepositoryException
- See Also:
UserManager.getAuthorizableByPath(String)
-
findAuthorizables
public Iterator<Authorizable> findAuthorizables(String relPath, String value) throws RepositoryException
- Specified by:
findAuthorizables
in interfaceUserManager
- Throws:
RepositoryException
- See Also:
UserManager.findAuthorizables(String,String)
-
findAuthorizables
public Iterator<Authorizable> findAuthorizables(String relPath, String value, int searchType) throws RepositoryException
- Specified by:
findAuthorizables
in interfaceUserManager
- Throws:
RepositoryException
- See Also:
UserManager.findAuthorizables(String,String, int)
-
findAuthorizables
public Iterator<Authorizable> findAuthorizables(Query query) throws RepositoryException
- Specified by:
findAuthorizables
in interfaceUserManager
- Throws:
RepositoryException
- See Also:
UserManager.findAuthorizables(Query)
-
createUser
public User createUser(String userID, String password) throws RepositoryException
- Specified by:
createUser
in 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:
createUser
in interfaceUserManager
- Throws:
AuthorizableExistsException
RepositoryException
- See Also:
UserManager.createUser(String, String, java.security.Principal, String)
-
createSystemUser
public User createSystemUser(String userID, String intermediatePath) throws AuthorizableExistsException, RepositoryException
- Specified by:
createSystemUser
in interfaceUserManager
- Throws:
AuthorizableExistsException
RepositoryException
-
createGroup
public Group createGroup(String groupID) throws AuthorizableExistsException, RepositoryException
- Specified by:
createGroup
in interfaceUserManager
- Throws:
AuthorizableExistsException
RepositoryException
- 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:
createGroup
in 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:
createGroup
in interfaceUserManager
- Parameters:
principal
- A principal that doesn't yet represent an existing user or group.intermediatePath
- Is always ignored.- Returns:
- A new group.
- Throws:
AuthorizableExistsException
RepositoryException
- See Also:
UserManager.createGroup(java.security.Principal, String)
-
createGroup
public Group createGroup(String groupID, Principal principal, String intermediatePath) throws AuthorizableExistsException, RepositoryException
Create a newGroup
from the givengroupID
andprincipal
. It will be created below the definedgroup path
.
Non-existent elements of the Path will be created as nodes of typerep:AuthorizableFolder
.- Specified by:
createGroup
in 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:
AuthorizableExistsException
RepositoryException
- See Also:
UserManager.createGroup(String, java.security.Principal, String)
-
isAutoSave
public boolean isAutoSave()
Always returnstrue
as by default the autoSave behavior cannot be altered (see alsoautoSave(boolean)
.- Specified by:
isAutoSave
in interfaceUserManager
- Returns:
- Always
true
. - See Also:
UserManager.isAutoSave()
-
autoSave
public void autoSave(boolean enable) throws UnsupportedRepositoryOperationException, RepositoryException
Always throwsunsupportedRepositoryOperationException
as modification of the autosave behavior is not supported.- Specified by:
autoSave
in interfaceUserManager
- Throws:
UnsupportedRepositoryOperationException
RepositoryException
- 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:SessionListener
Called when aSession
is about to be 'closed' by calling
. At this moment the session is still valid.Session.logout()
- Specified by:
loggingOut
in interfaceSessionListener
- Parameters:
session
- theSession
that is about to be 'closed'- See Also:
SessionListener.loggingOut(org.apache.jackrabbit.core.SessionImpl)
-
loggedOut
public void loggedOut(SessionImpl session)
Description copied from interface:SessionListener
Called when aSession
has been 'closed' by calling
.Session.logout()
- Specified by:
loggedOut
in interfaceSessionListener
- Parameters:
session
- theSession
that has been 'closed'- See Also:
SessionListener.loggedOut(org.apache.jackrabbit.core.SessionImpl)
-
-