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 of `UserDatabase` 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 of `Group`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 (to `catalina.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 of `Role`s defined in this database, keyed by role name.
    `protected java.util.Map<java.lang.String,​User>` | `users` | The set of `User`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()` |
    `void` | `close()` | Finalize access to this user database.
    `Group` | `createGroup​(java.lang.String groupname, java.lang.String description)` | Create and return a new `Group` defined in this user database.
    `Role` | `createRole​(java.lang.String rolename, java.lang.String description)` | Create and return a new `Role` defined in this user database.
    `User` | `createUser​(java.lang.String username, java.lang.String password, java.lang.String fullName)` | Create and return a new `User` defined in this user database.
    `Group` | `findGroup​(java.lang.String groupname)` | Return the `Group` with the specified group name, if any; otherwise return `null`.
    `Role` | `findRole​(java.lang.String rolename)` | Return the `Role` with the specified role name, if any; otherwise return `null`.
    `User` | `findUser​(java.lang.String username)` | Return the `User` with the specified user name, if any; otherwise return `null`.
    `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. Use `isWritable()`.
    `void` | `open()` | Initialize access to this user database.
    `void` | `removeGroup​(Group group)` | Remove the specified `Group` from this user database.
    `void` | `removeRole​(Role role)` | Remove the specified `Role` from this user database.
    `void` | `removeUser​(User user)` | Remove the specified `User` 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 database
    `void` | `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`

- - ### Field Detail

    - #### groups

          protected final java.util.Map<java.lang.String,​Group> groups

      The set of `Group`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 (to `catalina.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 of `Role`s defined in this database, keyed by role name.

    - #### users

          protected final java.util.Map<java.lang.String,​User> users

      The set of `User`s defined in this database, keyed by user name.

  - ### Constructor Detail

    - #### MemoryUserDatabase

          public MemoryUserDatabase()

      Create a new instance with default values.

    - #### MemoryUserDatabase

          public MemoryUserDatabase​(java.lang.String id)

      Create a new instance with the specified values.
      Parameters:
        `id` - Unique global identifier of this user database

  - ### Method Detail

    - #### getGroups

          public java.util.Iterator<Group> getGroups()

      Specified by:
        `getGroups` in interface `UserDatabase`
      Returns:
        the set of `Group`s defined in this user database.

    - #### getId

          public java.lang.String getId()

      Specified by:
        `getId` in interface `UserDatabase`
      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 interface `UserDatabase`
      Returns:
        the set of `Role`s defined in this user database.

    - #### getUsers

          public java.util.Iterator<User> getUsers()

      Specified by:
        `getUsers` in interface `UserDatabase`
      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 interface `UserDatabase`
      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 new `Group` defined in this user database.
      Specified by:
        `createGroup` in interface `UserDatabase`
      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 new `Role` defined in this user database.
      Specified by:
        `createRole` in interface `UserDatabase`
      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 new `User` defined in this user database.
      Specified by:
        `createUser` in interface `UserDatabase`
      Parameters:
        `username` - The logon username of the new user (must be unique)
        `password` - The logon password of the new user
        `fullName` - The full name of the new user
      Returns:
        The new user

    - #### findGroup

          public Group findGroup​(java.lang.String groupname)

      Return the `Group` with the specified group name, if any; otherwise return `null`.
      Specified by:
        `findGroup` in interface `UserDatabase`
      Parameters:
        `groupname` - Name of the group to return
      Returns:
        the `Group` with the specified group name, if any; otherwise return `null`.

    - #### findRole

          public Role findRole​(java.lang.String rolename)

      Return the `Role` with the specified role name, if any; otherwise return `null`.
      Specified by:
        `findRole` in interface `UserDatabase`
      Parameters:
        `rolename` - Name of the role to return
      Returns:
        the `Role` with the specified role name, if any; otherwise return `null`.

    - #### findUser

          public User findUser​(java.lang.String username)

      Return the `User` with the specified user name, if any; otherwise return `null`.
      Specified by:
        `findUser` in interface `UserDatabase`
      Parameters:
        `username` - Name of the user to return
      Returns:
        the `User` with the specified user name, if any; otherwise return `null`.

    - #### open

          public void open()
                    throws java.lang.Exception

      Initialize access to this user database.
      Specified by:
        `open` in interface `UserDatabase`
      Throws:
        `java.lang.Exception` - if any exception is thrown during opening

    - #### removeGroup

          public void removeGroup​(Group group)

      Remove the specified `Group` from this user database.
      Specified by:
        `removeGroup` in interface `UserDatabase`
      Parameters:
        `group` - The group to be removed

    - #### removeRole

          public void removeRole​(Role role)

      Remove the specified `Role` from this user database.
      Specified by:
        `removeRole` in interface `UserDatabase`
      Parameters:
        `role` - The role to be removed

    - #### removeUser

          public void removeUser​(User user)

      Remove the specified `User` from this user database.
      Specified by:
        `removeUser` in interface `UserDatabase`
      Parameters:
        `user` - The user to be removed

    - #### isWriteable

          @Deprecated
          public boolean isWriteable()

      Deprecated.
      Use `isWritable()`. 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 interface `UserDatabase`
      Throws:
        `java.lang.Exception` - if any exception is thrown during saving

    - #### backgroundProcess

          public void backgroundProcess()

    - #### toString

          public java.lang.String toString()

      Return a String representation of this UserDatabase.
      Overrides:
        `toString` in class `java.lang.Object`