Package org.apache.catalina.users
Class MemoryUserDatabase
- java.lang.Object
-
- org.apache.catalina.users.MemoryUserDatabase
-
- All Implemented Interfaces:
UserDatabase
public class MemoryUserDatabase extends java.lang.Object implements UserDatabase
Concrete implementation ofUserDatabase
that loads all defined users, groups, and roles into an in-memory data structure, and uses a specified XML file for its persistent storage.This class is thread-safe.
This class does not enforce what, in an RDBMS, would be called referential integrity. Concurrent modifications may result in inconsistent data such as a User retaining a reference to a Role that has been removed from the database.
- Since:
- 4.1
- Author:
- Craig R. McClanahan
-
-
Field Summary
Fields Modifier and Type Field Description protected java.util.Map<java.lang.String,Group>
groups
The set ofGroup
s defined in this database, keyed by group name.protected java.lang.String
id
The unique global identifier of this user database.protected java.lang.String
pathname
The relative (tocatalina.base
) or absolute pathname to the XML file in which we will save our persistent information.protected java.lang.String
pathnameNew
The relative or absolute pathname of the file in which we write our new information prior to renaming.protected java.lang.String
pathnameOld
The relative or absolute pathname to the file in which our old information is stored while renaming is in progress.protected boolean
readonly
A flag, indicating if the user database is read only.protected java.util.Map<java.lang.String,Role>
roles
The set ofRole
s defined in this database, keyed by role name.protected java.util.Map<java.lang.String,User>
users
The set ofUser
s defined in this database, keyed by user name.
-
Constructor Summary
Constructors Constructor Description MemoryUserDatabase()
Create a new instance with default values.MemoryUserDatabase(java.lang.String id)
Create a new instance with the specified values.
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
backgroundProcess()
Perform any background processing (e.g. checking for changes in persisted storage) required for the user database.void
close()
Finalize access to this user database.Group
createGroup(java.lang.String groupname, java.lang.String description)
Create and return a newGroup
defined in this user database.Role
createRole(java.lang.String rolename, java.lang.String description)
Create and return a newRole
defined in this user database.User
createUser(java.lang.String username, java.lang.String password, java.lang.String fullName)
Create and return a newUser
defined in this user database.Group
findGroup(java.lang.String groupname)
Return theGroup
with the specified group name, if any; otherwise returnnull
.Role
findRole(java.lang.String rolename)
Return theRole
with the specified role name, if any; otherwise returnnull
.User
findUser(java.lang.String username)
Return theUser
with the specified user name, if any; otherwise returnnull
.java.util.Iterator<Group>
getGroups()
java.lang.String
getId()
java.lang.String
getPathname()
boolean
getReadonly()
java.util.Iterator<Role>
getRoles()
java.util.Iterator<User>
getUsers()
boolean
getWatchSource()
boolean
isWritable()
Check for permissions to save this user database to persistent storage location.boolean
isWriteable()
Deprecated.UseisWritable()
.void
open()
Initialize access to this user database.void
removeGroup(Group group)
Remove the specifiedGroup
from this user database.void
removeRole(Role role)
Remove the specifiedRole
from this user database.void
removeUser(User user)
Remove the specifiedUser
from this user database.void
save()
Save any updated information to the persistent storage location for this user database.void
setPathname(java.lang.String pathname)
Set the relative or absolute pathname to the persistent storage file.void
setReadonly(boolean readonly)
Setting the readonly status of the user databasevoid
setWatchSource(boolean watchSource)
java.lang.String
toString()
Return a String representation of this UserDatabase.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.apache.catalina.UserDatabase
isAvailable, isSparse, modifiedGroup, modifiedRole, modifiedUser
-
-
-
-
Field Detail
-
groups
protected final java.util.Map<java.lang.String,Group> groups
The set ofGroup
s defined in this database, keyed by group name.
-
id
protected final java.lang.String id
The unique global identifier of this user database.
-
pathname
protected java.lang.String pathname
The relative (tocatalina.base
) or absolute pathname to the XML file in which we will save our persistent information.
-
pathnameOld
protected java.lang.String pathnameOld
The relative or absolute pathname to the file in which our old information is stored while renaming is in progress.
-
pathnameNew
protected java.lang.String pathnameNew
The relative or absolute pathname of the file in which we write our new information prior to renaming.
-
readonly
protected boolean readonly
A flag, indicating if the user database is read only.
-
roles
protected final java.util.Map<java.lang.String,Role> roles
The set ofRole
s defined in this database, keyed by role name.
-
-
Method Detail
-
getGroups
public java.util.Iterator<Group> getGroups()
- Specified by:
getGroups
in interfaceUserDatabase
- Returns:
- the set of
Group
s defined in this user database.
-
getId
public java.lang.String getId()
- Specified by:
getId
in interfaceUserDatabase
- Returns:
- the unique global identifier of this user database.
-
getPathname
public java.lang.String getPathname()
- Returns:
- the relative or absolute pathname to the persistent storage file.
-
setPathname
public void setPathname(java.lang.String pathname)
Set the relative or absolute pathname to the persistent storage file.- Parameters:
pathname
- The new pathname
-
getReadonly
public boolean getReadonly()
- Returns:
- the readonly status of the user database
-
setReadonly
public void setReadonly(boolean readonly)
Setting the readonly status of the user database- Parameters:
readonly
- the new status
-
getWatchSource
public boolean getWatchSource()
-
setWatchSource
public void setWatchSource(boolean watchSource)
-
getRoles
public java.util.Iterator<Role> getRoles()
- Specified by:
getRoles
in interfaceUserDatabase
- Returns:
- the set of
Role
s defined in this user database.
-
getUsers
public java.util.Iterator<User> getUsers()
- Specified by:
getUsers
in interfaceUserDatabase
- Returns:
- the set of
User
s defined in this user database.
-
close
public void close() throws java.lang.Exception
Finalize access to this user database.- Specified by:
close
in interfaceUserDatabase
- Throws:
java.lang.Exception
- if any exception is thrown during closing
-
createGroup
public Group createGroup(java.lang.String groupname, java.lang.String description)
Create and return a newGroup
defined in this user database.- Specified by:
createGroup
in interfaceUserDatabase
- Parameters:
groupname
- The group name of the new group (must be unique)description
- The description of this group- Returns:
- The new group
-
createRole
public Role createRole(java.lang.String rolename, java.lang.String description)
Create and return a newRole
defined in this user database.- Specified by:
createRole
in interfaceUserDatabase
- Parameters:
rolename
- The role name of the new group (must be unique)description
- The description of this group- Returns:
- The new role
-
createUser
public User createUser(java.lang.String username, java.lang.String password, java.lang.String fullName)
Create and return a newUser
defined in this user database.- Specified by:
createUser
in interfaceUserDatabase
- Parameters:
username
- The logon username of the new user (must be unique)password
- The logon password of the new userfullName
- The full name of the new user- Returns:
- The new user
-
findGroup
public Group findGroup(java.lang.String groupname)
Return theGroup
with the specified group name, if any; otherwise returnnull
.- Specified by:
findGroup
in interfaceUserDatabase
- Parameters:
groupname
- Name of the group to return- Returns:
- the
Group
with the specified group name, if any; otherwise returnnull
.
-
findRole
public Role findRole(java.lang.String rolename)
Return theRole
with the specified role name, if any; otherwise returnnull
.- Specified by:
findRole
in interfaceUserDatabase
- Parameters:
rolename
- Name of the role to return- Returns:
- the
Role
with the specified role name, if any; otherwise returnnull
.
-
findUser
public User findUser(java.lang.String username)
Return theUser
with the specified user name, if any; otherwise returnnull
.- Specified by:
findUser
in interfaceUserDatabase
- Parameters:
username
- Name of the user to return- Returns:
- the
User
with the specified user name, if any; otherwise returnnull
.
-
open
public void open() throws java.lang.Exception
Initialize access to this user database.- Specified by:
open
in interfaceUserDatabase
- Throws:
java.lang.Exception
- if any exception is thrown during opening
-
removeGroup
public void removeGroup(Group group)
Remove the specifiedGroup
from this user database.- Specified by:
removeGroup
in interfaceUserDatabase
- Parameters:
group
- The group to be removed
-
removeRole
public void removeRole(Role role)
Remove the specifiedRole
from this user database.- Specified by:
removeRole
in interfaceUserDatabase
- Parameters:
role
- The role to be removed
-
removeUser
public void removeUser(User user)
Remove the specifiedUser
from this user database.- Specified by:
removeUser
in interfaceUserDatabase
- Parameters:
user
- The user to be removed
-
isWriteable
@Deprecated public boolean isWriteable()
Deprecated.UseisWritable()
. This method will be removed in Tomcat 10.1.x onwards.Check for permissions to save this user database to persistent storage location.- Returns:
true
if the database is writable
-
isWritable
public boolean isWritable()
Check for permissions to save this user database to persistent storage location.- Returns:
true
if the database is writable
-
save
public void save() throws java.lang.Exception
Save any updated information to the persistent storage location for this user database.- Specified by:
save
in interfaceUserDatabase
- Throws:
java.lang.Exception
- if any exception is thrown during saving
-
backgroundProcess
public void backgroundProcess()
Description copied from interface:UserDatabase
Perform any background processing (e.g. checking for changes in persisted storage) required for the user database.- Specified by:
backgroundProcess
in interfaceUserDatabase
-
toString
public java.lang.String toString()
Return a String representation of this UserDatabase.- Overrides:
toString
in classjava.lang.Object
-
-