# Class MemoryRealm

java.lang.Object
org.apache.catalina.util.LifecycleBase
org.apache.catalina.util.LifecycleMBeanBase
org.apache.catalina.realm.RealmBase
org.apache.catalina.realm.MemoryRealm

All Implemented Interfaces:
  `MBeanRegistration, Contained, JmxEnabled, Lifecycle, Realm`

Direct Known Subclasses:
  `JAASMemoryLoginModule`

public class MemoryRealm extends RealmBase
Simple implementation of Realm that reads an XML file to configure the valid users, passwords, and roles. The file format (and default file location) are identical to those currently supported by Tomcat 3.X.

IMPLEMENTATION NOTE: It is assumed that the in-memory collection representing our defined users (and their roles) is initialized at application startup and never modified again. Therefore, no thread synchronization is performed around accesses to the principals collection.

## Nested Class Summary

### Nested classes/interfaces inherited from class RealmBase

`RealmBase.AllRolesMode`

### Nested classes/interfaces inherited from interface Lifecycle

`Lifecycle.SingleUse`

## Field Summary

### Fields inherited from class RealmBase

`allRolesMode, container, containerLog, realmPath, sm, stripRealmForGss, support, USER_ATTRIBUTES_DELIMITER, USER_ATTRIBUTES_WILDCARD, userAttributes, userAttributesList, validate, x509UsernameRetriever, x509UsernameRetrieverClassName`

### Fields inherited from interface Lifecycle

`AFTER_DESTROY_EVENT, AFTER_INIT_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_DESTROY_EVENT, BEFORE_INIT_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, CONFIGURE_START_EVENT, CONFIGURE_STOP_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT`

## Constructor Summary

Constructors
Constructor
Description
`MemoryRealm()`

## Method Summary

Modifier and Type
Method
Description
`Principal`
`authenticate(String username, String credentials)`
Try to authenticate using the specified username and credentials.
`protected Digester`
`getDigester()`
`protected String`
`getPassword(String username)`
Get the password for the specified user.
`String`
`getPathname()`
`protected Principal`
`getPrincipal(String username)`
Get the principal associated with the specified user.
`void`
`setPathname(String pathname)`
Set the pathname of our XML file containing user definitions.
`protected void`
`startInternal()`
Prepare for the beginning of active use of the public methods of this component and implement the requirements of `LifecycleBase.startInternal()`.

### Methods inherited from class RealmBase

`addPropertyChangeListener, authenticate, authenticate, authenticate, authenticate, authenticate, authenticate, backgroundProcess, findSecurityConstraints, getAllRolesMode, getContainer, getCredentialHandler, getDigest, getDigest, getDomainInternal, getObjectNameKeyProperties, getPrincipal, getPrincipal, getPrincipal, getRealmPath, getRealmSuffix, getServer, getTransportGuaranteeRedirectStatus, getUserAttributes, getValidate, getX509UsernameRetrieverClassName, hasMessageDigest, hasResourcePermission, hasRole, hasRoleInternal, hasUserDataPermission, initInternal, isStripRealmForGss, main, parseUserAttributes, removePropertyChangeListener, setAllRolesMode, setContainer, setCredentialHandler, setRealmPath, setStripRealmForGss, setTransportGuaranteeRedirectStatus, setUserAttributes, setValidate, setX509UsernameRetrieverClassName, stopInternal, toString`

### Methods inherited from class LifecycleMBeanBase

`destroyInternal, getDomain, getObjectName, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister, unregister`

### Methods inherited from class LifecycleBase

`addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop`

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Methods inherited from interface Realm

`isAvailable`

## Constructor Details

### MemoryRealm

public MemoryRealm()

## Method Details

### getPathname

public String getPathname()

Returns:
  the pathname of our XML file containing user definitions.

### setPathname

public void setPathname(String pathname)
Set the pathname of our XML file containing user definitions. If a relative pathname is specified, it is resolved against "catalina.base".

Parameters:
  `pathname` - The new pathname

### authenticate

public Principal authenticate(String username, String credentials)
Description copied from interface: `Realm`
Try to authenticate using the specified username and credentials.

Specified by:
  `authenticate` in interface `Realm`
Overrides:
  `authenticate` in class `RealmBase`
Parameters:
  `username` - Username of the Principal to look up
  `credentials` - Password or other credentials to use in authenticating this username
Returns:
  the associated principal, or `null` if there is none

### getDigester

protected Digester getDigester()

Returns:
  a configured `Digester` to use for processing the XML input file, creating a new one if necessary.

### getPassword

protected String getPassword(String username)
Description copied from class: `RealmBase`
Get the password for the specified user.

Specified by:
  `getPassword` in class `RealmBase`
Parameters:
  `username` - The username
Returns:
  the password associated with the given principal's username.

### getPrincipal

protected Principal getPrincipal(String username)
Description copied from class: `RealmBase`
Get the principal associated with the specified user.

Specified by:
  `getPrincipal` in class `RealmBase`
Parameters:
  `username` - The username
Returns:
  the Principal associated with the given username.

### startInternal

protected void startInternal() throws LifecycleException
Description copied from class: `RealmBase`
Prepare for the beginning of active use of the public methods of this component and implement the requirements of `LifecycleBase.startInternal()`.

Overrides:
  `startInternal` in class `RealmBase`
Throws:
  `LifecycleException` - if this component detects a fatal error that prevents this component from being used