Fields Summary |
---|
private static com.sun.org.apache.commons.logging.Log | log |
private static com.sun.org.apache.commons.digester.Digester | digesterThe Digester we will use to process in-memory database files. |
protected final String | infoDescriptive information about this Realm implementation. |
protected static final String | nameDescriptive information about this Realm implementation. |
private String | pathnameThe pathname (absolute or relative to Catalina's current working
directory) of the XML file containing our database information. |
private HashMap | principalsThe set of valid Principals for this Realm, keyed by user name. |
private static org.apache.catalina.util.StringManager | smThe string manager for this package. |
private boolean | startedHas this component been started? |
Methods Summary |
---|
void | addUser(java.lang.String username, java.lang.String password, java.lang.String roles)Add a new user to the in-memory database.
// Accumulate the list of roles for this user
ArrayList list = new ArrayList();
roles += ",";
while (true) {
int comma = roles.indexOf(',");
if (comma < 0)
break;
String role = roles.substring(0, comma).trim();
list.add(role);
roles = roles.substring(comma + 1);
}
// Construct and cache the Principal for this user
GenericPrincipal principal =
new GenericPrincipal(this, username, password, list);
principals.put(username, principal);
|
public java.security.Principal | authenticate(java.lang.String username, java.lang.String credentials)Return the Principal associated with the specified username and
credentials, if there is one; otherwise return null .
GenericPrincipal principal =
(GenericPrincipal) principals.get(username);
boolean validated = false;
if (principal != null) {
if (hasMessageDigest()) {
// Hex hashes should be compared case-insensitive
validated = (digest(credentials)
.equalsIgnoreCase(principal.getPassword()));
} else {
validated =
(digest(credentials).equals(principal.getPassword()));
}
}
if (validated) {
if (log.isDebugEnabled())
log.debug(sm.getString("memoryRealm.authenticateSuccess", username));
return (principal);
} else {
if (log.isDebugEnabled())
log.debug(sm.getString("memoryRealm.authenticateFailure", username));
return (null);
}
|
protected synchronized com.sun.org.apache.commons.digester.Digester | getDigester()Return a configured Digester to use for processing
the XML input file, creating a new one if necessary.
if (digester == null) {
digester = new Digester();
digester.setDebug(this.debug);
digester.setValidating(false);
digester.addRuleSet(new MemoryRuleSet());
}
return (digester);
|
public java.lang.String | getInfo()Return descriptive information about this Realm implementation and
the corresponding version number, in the format
<description>/<version> .
// ------------------------------------------------------------- Properties
return info;
|
protected java.lang.String | getName()Return a short name for this Realm implementation.
return (this.name);
|
protected java.lang.String | getPassword(java.lang.String username)Return the password associated with the given principal's user name.
GenericPrincipal principal =
(GenericPrincipal) principals.get(username);
if (principal != null) {
return (principal.getPassword());
} else {
return (null);
}
|
public java.lang.String | getPathname()Return the pathname of our XML file containing user definitions.
return pathname;
|
protected java.security.Principal | getPrincipal(java.lang.String username)Return the Principal associated with the given user name.
return (Principal) principals.get(username);
|
public void | setPathname(java.lang.String pathname)Set the pathname of our XML file containing user definitions. If a
relative pathname is specified, it is resolved against "catalina.base".
this.pathname = pathname;
|
public synchronized void | start()Prepare for active use of the public methods of this Component.
// Validate the existence of our database file
File file = new File(pathname);
if (!file.isAbsolute())
file = new File(System.getProperty("catalina.base"), pathname);
if (!file.exists() || !file.canRead())
throw new LifecycleException
(sm.getString("memoryRealm.loadExist",
file.getAbsolutePath()));
// Load the contents of the database file
if (log.isDebugEnabled())
log.debug(sm.getString("memoryRealm.loadPath",
file.getAbsolutePath()));
Digester digester = getDigester();
try {
synchronized (digester) {
digester.push(this);
digester.parse(file);
}
} catch (Exception e) {
throw new LifecycleException("memoryRealm.readXml", e);
}
// Perform normal superclass initialization
super.start();
|
public synchronized void | stop()Gracefully shut down active use of the public methods of this Component.
// Perform normal superclass finalization
super.stop();
// No shutdown activities required
|