Package org.apache.catalina.realm
Class DataSourceRealm
- java.lang.Object
-
- org.apache.catalina.util.LifecycleBase
-
- org.apache.catalina.util.LifecycleMBeanBase
-
- org.apache.catalina.realm.RealmBase
-
- org.apache.catalina.realm.DataSourceRealm
-
- All Implemented Interfaces:
javax.management.MBeanRegistration
,Contained
,JmxEnabled
,Lifecycle
,Realm
public class DataSourceRealm extends RealmBase
Implementation of Realm that works with any JDBC JNDI DataSource. See the Realm How-To for more details on how to set up the database and for configuration options.- Author:
- Glenn L. Nielsen, Craig R. McClanahan, Carson McDonald, Ignacio Ortega
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.catalina.realm.RealmBase
RealmBase.AllRolesMode
-
Nested classes/interfaces inherited from interface org.apache.catalina.Lifecycle
Lifecycle.SingleUse
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.String
dataSourceName
The name of the JNDI JDBC DataSourceprotected boolean
localDataSource
Context local datasource.protected java.lang.String
roleNameCol
The column in the user role table that names a roleprotected java.lang.String
userCredCol
The column in the user table that holds the user's credentialsprotected java.lang.String
userNameCol
The column in the user table that holds the user's nameprotected java.lang.String
userRoleTable
The table that holds the relation between user's and rolesprotected java.lang.String
userTable
The table that holds user data.-
Fields inherited from class org.apache.catalina.realm.RealmBase
allRolesMode, container, containerLog, realmPath, sm, stripRealmForGss, support, validate, x509UsernameRetriever, x509UsernameRetrieverClassName
-
Fields inherited from interface org.apache.catalina.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 DataSourceRealm()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description 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 returnnull
.protected java.security.Principal
authenticate(java.sql.Connection dbConnection, java.lang.String username, java.lang.String credentials)
Return the Principal associated with the specified username and credentials, if there is one; otherwise returnnull
.protected void
close(java.sql.Connection dbConnection)
Close the specified database connection.java.lang.String
getDataSourceName()
boolean
getLocalDataSource()
protected java.lang.String
getPassword(java.lang.String username)
Get the password for the specified user.protected java.lang.String
getPassword(java.sql.Connection dbConnection, java.lang.String username)
Return the password associated with the given principal's user name.protected java.security.Principal
getPrincipal(java.lang.String username)
Return the Principal associated with the given user name.java.lang.String
getRoleNameCol()
protected java.util.ArrayList<java.lang.String>
getRoles(java.lang.String username)
Return the roles associated with the given user name.protected java.util.ArrayList<java.lang.String>
getRoles(java.sql.Connection dbConnection, java.lang.String username)
Return the roles associated with the given user name.java.lang.String
getUserCredCol()
java.lang.String
getUserNameCol()
java.lang.String
getUserRoleTable()
java.lang.String
getUserTable()
boolean
isAvailable()
Return the availability of the realm for authentication.protected java.sql.Connection
open()
Open the specified database connection.void
setDataSourceName(java.lang.String dataSourceName)
Set the name of the JNDI JDBC DataSource.void
setLocalDataSource(boolean localDataSource)
Set to true to cause the datasource to be looked up in the webapp JNDI Context.void
setRoleNameCol(java.lang.String roleNameCol)
Set the column in the user role table that names a role.void
setUserCredCol(java.lang.String userCredCol)
Set the column in the user table that holds the user's credentials.void
setUserNameCol(java.lang.String userNameCol)
Set the column in the user table that holds the user's name.void
setUserRoleTable(java.lang.String userRoleTable)
Set the table that holds the relation between user's and roles.void
setUserTable(java.lang.String userTable)
Set the table that holds user data.protected void
startInternal()
Prepare for the beginning of active use of the public methods of this component and implement the requirements ofLifecycleBase.startInternal()
.-
Methods inherited from class org.apache.catalina.realm.RealmBase
addPropertyChangeListener, authenticate, authenticate, authenticate, authenticate, authenticate, backgroundProcess, findSecurityConstraints, getAllRolesMode, getContainer, getCredentialHandler, getDigest, getDomainInternal, getObjectNameKeyProperties, getPrincipal, getPrincipal, getRealmPath, getRealmSuffix, getServer, getTransportGuaranteeRedirectStatus, getValidate, getX509UsernameRetrieverClassName, hasMessageDigest, hasResourcePermission, hasRole, hasRoleInternal, hasUserDataPermission, initInternal, isStripRealmForGss, main, removePropertyChangeListener, setAllRolesMode, setContainer, setCredentialHandler, setRealmPath, setStripRealmForGss, setTransportGuaranteeRedirectStatus, setValidate, setX509UsernameRetrieverClassName, stopInternal, toString
-
Methods inherited from class org.apache.catalina.util.LifecycleMBeanBase
destroyInternal, getDomain, getObjectName, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister, unregister
-
Methods inherited from class org.apache.catalina.util.LifecycleBase
addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop
-
-
-
-
Field Detail
-
dataSourceName
protected java.lang.String dataSourceName
The name of the JNDI JDBC DataSource
-
localDataSource
protected boolean localDataSource
Context local datasource.
-
roleNameCol
protected java.lang.String roleNameCol
The column in the user role table that names a role
-
userCredCol
protected java.lang.String userCredCol
The column in the user table that holds the user's credentials
-
userNameCol
protected java.lang.String userNameCol
The column in the user table that holds the user's name
-
userRoleTable
protected java.lang.String userRoleTable
The table that holds the relation between user's and roles
-
userTable
protected java.lang.String userTable
The table that holds user data.
-
-
Method Detail
-
getDataSourceName
public java.lang.String getDataSourceName()
- Returns:
- the name of the JNDI JDBC DataSource.
-
setDataSourceName
public void setDataSourceName(java.lang.String dataSourceName)
Set the name of the JNDI JDBC DataSource.- Parameters:
dataSourceName
- the name of the JNDI JDBC DataSource
-
getLocalDataSource
public boolean getLocalDataSource()
- Returns:
- if the datasource will be looked up in the webapp JNDI Context.
-
setLocalDataSource
public void setLocalDataSource(boolean localDataSource)
Set to true to cause the datasource to be looked up in the webapp JNDI Context.- Parameters:
localDataSource
- the new flag value
-
getRoleNameCol
public java.lang.String getRoleNameCol()
- Returns:
- the column in the user role table that names a role.
-
setRoleNameCol
public void setRoleNameCol(java.lang.String roleNameCol)
Set the column in the user role table that names a role.- Parameters:
roleNameCol
- The column name
-
getUserCredCol
public java.lang.String getUserCredCol()
- Returns:
- the column in the user table that holds the user's credentials.
-
setUserCredCol
public void setUserCredCol(java.lang.String userCredCol)
Set the column in the user table that holds the user's credentials.- Parameters:
userCredCol
- The column name
-
getUserNameCol
public java.lang.String getUserNameCol()
- Returns:
- the column in the user table that holds the user's name.
-
setUserNameCol
public void setUserNameCol(java.lang.String userNameCol)
Set the column in the user table that holds the user's name.- Parameters:
userNameCol
- The column name
-
getUserRoleTable
public java.lang.String getUserRoleTable()
- Returns:
- the table that holds the relation between user's and roles.
-
setUserRoleTable
public void setUserRoleTable(java.lang.String userRoleTable)
Set the table that holds the relation between user's and roles.- Parameters:
userRoleTable
- The table name
-
getUserTable
public java.lang.String getUserTable()
- Returns:
- the table that holds user data..
-
setUserTable
public void setUserTable(java.lang.String userTable)
Set the table that holds user data.- Parameters:
userTable
- The table name
-
authenticate
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 returnnull
. If there are any errors with the JDBC connection, executing the query or anything we return null (don't authenticate). This event is also logged, and the connection will be closed so that a subsequent request will automatically re-open it.- Specified by:
authenticate
in interfaceRealm
- Overrides:
authenticate
in classRealmBase
- Parameters:
username
- Username of the Principal to look upcredentials
- Password or other credentials to use in authenticating this username- Returns:
- the associated principal, or
null
if there is none.
-
isAvailable
public boolean isAvailable()
Description copied from interface:Realm
Return the availability of the realm for authentication.- Returns:
true
if the realm is able to perform authentication
-
authenticate
protected java.security.Principal authenticate(java.sql.Connection dbConnection, java.lang.String username, java.lang.String credentials)
Return the Principal associated with the specified username and credentials, if there is one; otherwise returnnull
.- Parameters:
dbConnection
- The database connection to be usedusername
- Username of the Principal to look upcredentials
- Password or other credentials to use in authenticating this username- Returns:
- the associated principal, or
null
if there is none.
-
close
protected void close(java.sql.Connection dbConnection)
Close the specified database connection.- Parameters:
dbConnection
- The connection to be closed
-
open
protected java.sql.Connection open()
Open the specified database connection.- Returns:
- Connection to the database
-
getPassword
protected java.lang.String getPassword(java.lang.String username)
Description copied from class:RealmBase
Get the password for the specified user.- Specified by:
getPassword
in classRealmBase
- Parameters:
username
- The user name- Returns:
- the password associated with the given principal's user name.
-
getPassword
protected java.lang.String getPassword(java.sql.Connection dbConnection, java.lang.String username)
Return the password associated with the given principal's user name.- Parameters:
dbConnection
- The database connection to be usedusername
- Username for which password should be retrieved- Returns:
- the password for the specified user
-
getPrincipal
protected java.security.Principal getPrincipal(java.lang.String username)
Return the Principal associated with the given user name.- Specified by:
getPrincipal
in classRealmBase
- Parameters:
username
- the user name- Returns:
- the principal object
-
getRoles
protected java.util.ArrayList<java.lang.String> getRoles(java.lang.String username)
Return the roles associated with the given user name.- Parameters:
username
- User name for which roles should be retrieved- Returns:
- an array list of the role names
-
getRoles
protected java.util.ArrayList<java.lang.String> getRoles(java.sql.Connection dbConnection, java.lang.String username)
Return the roles associated with the given user name.- Parameters:
dbConnection
- The database connection to be usedusername
- User name for which roles should be retrieved- Returns:
- an array list of the role names
-
startInternal
protected void startInternal() throws LifecycleException
Prepare for the beginning of active use of the public methods of this component and implement the requirements ofLifecycleBase.startInternal()
.- Overrides:
startInternal
in classRealmBase
- Throws:
LifecycleException
- if this component detects a fatal error that prevents this component from being used
-
-