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:
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 String
dataSourceName
The name of the JNDI JDBC DataSourceprotected boolean
localDataSource
Context local datasource.protected String
roleNameCol
The column in the user role table that names a roleprotected String
userCredCol
The column in the user table that holds the user's credentialsprotected String
userNameCol
The column in the user table that holds the user's nameprotected String
userRoleTable
The table that holds the relation between user's and rolesprotected String
userTable
The table that holds user data.-
Fields inherited from class org.apache.catalina.realm.RealmBase
allRolesMode, container, containerLog, realmPath, sm, stripRealmForGss, support, USER_ATTRIBUTES_DELIMITER, USER_ATTRIBUTES_WILDCARD, userAttributes, userAttributesList, 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 Principal
authenticate(String username, String credentials)
Try to authenticate using the specified username and credentials.protected Principal
authenticate(Connection dbConnection, String username, String credentials)
Return the Principal associated with the specified username and credentials, if there is one; otherwise returnnull
.protected void
close(Connection dbConnection)
Close the specified database connection.String
getDataSourceName()
boolean
getLocalDataSource()
protected String
getPassword(String username)
Get the password for the specified user.protected String
getPassword(Connection dbConnection, String username)
Return the password associated with the given principal's user name.protected Principal
getPrincipal(String username)
Return the Principal associated with the given user name.String
getRoleNameCol()
protected ArrayList<String>
getRoles(String username)
Return the roles associated with the given user name.protected ArrayList<String>
getRoles(Connection dbConnection, String username)
Return the roles associated with the given user name.String
getUserCredCol()
String
getUserNameCol()
String
getUserRoleTable()
String
getUserTable()
boolean
isAvailable()
Return the availability of the realm for authentication.protected Connection
open()
Open the specified database connection.void
setDataSourceName(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(String roleNameCol)
Set the column in the user role table that names a role.void
setUserCredCol(String userCredCol)
Set the column in the user table that holds the user's credentials.void
setUserNameCol(String userNameCol)
Set the column in the user table that holds the user's name.void
setUserRoleTable(String userRoleTable)
Set the table that holds the relation between user's and roles.void
setUserTable(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, authenticate, backgroundProcess, findSecurityConstraints, getAllRolesMode, getContainer, getCredentialHandler, getDigest, getDigest, getDomainInternal, getObjectNameKeyProperties, 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 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 String dataSourceName
The name of the JNDI JDBC DataSource
-
localDataSource
protected boolean localDataSource
Context local datasource.
-
roleNameCol
protected String roleNameCol
The column in the user role table that names a role
-
userCredCol
protected String userCredCol
The column in the user table that holds the user's credentials
-
userNameCol
protected String userNameCol
The column in the user table that holds the user's name
-
userRoleTable
protected String userRoleTable
The table that holds the relation between user's and roles
-
userTable
protected String userTable
The table that holds user data.
-
-
Method Detail
-
getDataSourceName
public String getDataSourceName()
- Returns:
- the name of the JNDI JDBC DataSource.
-
setDataSourceName
public void setDataSourceName(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 String getRoleNameCol()
- Returns:
- the column in the user role table that names a role.
-
setRoleNameCol
public void setRoleNameCol(String roleNameCol)
Set the column in the user role table that names a role.- Parameters:
roleNameCol
- The column name
-
getUserCredCol
public String getUserCredCol()
- Returns:
- the column in the user table that holds the user's credentials.
-
setUserCredCol
public void setUserCredCol(String userCredCol)
Set the column in the user table that holds the user's credentials.- Parameters:
userCredCol
- The column name
-
getUserNameCol
public String getUserNameCol()
- Returns:
- the column in the user table that holds the user's name.
-
setUserNameCol
public void setUserNameCol(String userNameCol)
Set the column in the user table that holds the user's name.- Parameters:
userNameCol
- The column name
-
getUserRoleTable
public String getUserRoleTable()
- Returns:
- the table that holds the relation between user's and roles.
-
setUserRoleTable
public void setUserRoleTable(String userRoleTable)
Set the table that holds the relation between user's and roles.- Parameters:
userRoleTable
- The table name
-
getUserTable
public String getUserTable()
- Returns:
- the table that holds user data..
-
setUserTable
public void setUserTable(String userTable)
Set the table that holds user data.- Parameters:
userTable
- The table name
-
authenticate
public Principal authenticate(String username, String credentials)
Try to authenticate using the specified username and credentials.If there are any errors with the JDBC connection, executing the query or anything this method returns null (doesn'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 Principal authenticate(Connection dbConnection, String username, 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(Connection dbConnection)
Close the specified database connection.- Parameters:
dbConnection
- The connection to be closed
-
open
protected Connection open()
Open the specified database connection.- Returns:
- Connection to the database
-
getPassword
protected String getPassword(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 String getPassword(Connection dbConnection, 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 Principal getPrincipal(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 ArrayList<String> getRoles(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 ArrayList<String> getRoles(Connection dbConnection, 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
Description copied from class:RealmBase
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
-
-