Class AbstractLdapRealm
- All Implemented Interfaces:
LogoutAware,Authorizer,PermissionResolverAware,RolePermissionResolverAware,org.apache.shiro.cache.CacheManagerAware,org.apache.shiro.lang.util.Initializable,org.apache.shiro.lang.util.Nameable,Realm
- Direct Known Subclasses:
ActiveDirectoryRealm
A Realm that authenticates with an LDAP
server to build the Subject for a user. This implementation only returns roles for a
particular user, and not permissions - but it can be subclassed to build a permission
list as well.
Implementations would need to implement the
queryForAuthenticationInfo(org.apache.shiro.authc.AuthenticationToken, LdapContextFactory) and
queryForAuthorizationInfo(org.apache.shiro.subject.PrincipalCollection, LdapContextFactory) abstract methods.
By default, this implementation will create an instance of JndiLdapContextFactory to use for
creating LDAP connections using the principalSuffix, searchBase, url, systemUsername, and systemPassword properties
specified on the realm. The remaining settings use the defaults of JndiLdapContextFactory, which are usually
sufficient. If more customized connections are needed, you should inject a custom LdapContextFactory, which
will cause these properties specified on the realm to be ignored.
- Since:
- 0.1
- See Also:
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected AuthenticationInfoRetrieves authentication data from an implementation-specific datasource (RDBMS, LDAP, etc.) for the given authentication token.protected AuthorizationInfodoGetAuthorizationInfo(PrincipalCollection principals) Retrieves the AuthorizationInfo for the given principals from the underlying data store.protected voidonInit()Initializes this realm and potentially enables a cache, depending on configuration.protected abstract AuthenticationInfoqueryForAuthenticationInfo(AuthenticationToken token, LdapContextFactory ldapContextFactory) Abstract method that should be implemented by subclasses to builds anAuthenticationInfoobject by querying the LDAP context for the specified username.protected abstract AuthorizationInfoqueryForAuthorizationInfo(PrincipalCollection principal, LdapContextFactory ldapContextFactory) Abstract method that should be implemented by subclasses to builds anAuthorizationInfoobject by querying the LDAP context for the specified principal.voidsetLdapContextFactory(LdapContextFactory ldapContextFactory) Configures theLdapContextFactoryimplementation that is used to create LDAP connections for authentication and authorization.voidsetSearchBase(String searchBase) Used when initializing the defaultLdapContextFactory.voidsetSearchFilter(String searchFilter) voidsetSystemPassword(String systemPassword) Used when initializing the defaultLdapContextFactory.voidsetSystemUsername(String systemUsername) Used when initializing the defaultLdapContextFactory.voidUsed when initializing the defaultLdapContextFactory.Methods inherited from class org.apache.shiro.realm.AuthorizingRealm
afterCacheManagerSet, checkPermission, checkPermission, checkPermission, checkPermissions, checkPermissions, checkPermissions, checkRole, checkRole, checkRoles, checkRoles, checkRoles, clearCachedAuthorizationInfo, doClearCache, getAuthorizationCache, getAuthorizationCacheKey, getAuthorizationCacheName, getAuthorizationInfo, getPermissionResolver, getPermissions, getRolePermissionResolver, hasAllRoles, hasRole, hasRole, hasRoles, hasRoles, isAuthorizationCachingEnabled, isPermitted, isPermitted, isPermitted, isPermitted, isPermitted, isPermitted, isPermittedAll, isPermittedAll, isPermittedAll, setAuthorizationCache, setAuthorizationCacheName, setAuthorizationCachingEnabled, setName, setPermissionResolver, setRolePermissionResolverMethods inherited from class org.apache.shiro.realm.AuthenticatingRealm
assertCredentialsMatch, clearCachedAuthenticationInfo, getAuthenticationCache, getAuthenticationCacheKey, getAuthenticationCacheKey, getAuthenticationCacheName, getAuthenticationInfo, getAuthenticationTokenClass, getCredentialsMatcher, init, isAuthenticationCachingEnabled, isAuthenticationCachingEnabled, setAuthenticationCache, setAuthenticationCacheName, setAuthenticationCachingEnabled, setAuthenticationTokenClass, setCredentialsMatcher, supportsMethods inherited from class org.apache.shiro.realm.CachingRealm
clearCache, getAvailablePrincipal, getCacheManager, getName, isCachingEnabled, onLogout, setCacheManager, setCachingEnabledMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.shiro.lang.util.Initializable
init
-
Field Details
-
principalSuffix
Defines the Suffix added to the User Principal Name when looking up groups (e.g. "memberOf") AD Example: User's Principal Name be "John.Doe" User's E-Mail Address be "John.Doe@example.com" For the example below, set: realm.principalSuffix = @example.com Only then, "John.Doe" and also "John.Doe@example.com" can authorize against groups -
searchBase
-
url
-
systemUsername
-
systemPassword
-
searchFilter
SHIRO-115 - prevent potential code injection.
-
-
Constructor Details
-
AbstractLdapRealm
public AbstractLdapRealm()
-
-
Method Details
-
setSearchBase
Used when initializing the defaultLdapContextFactory. This property is ignored if a custom LdapContextFactory is specified.- Parameters:
searchBase- the search base.
-
setUrl
Used when initializing the defaultLdapContextFactory. This property is ignored if a custom LdapContextFactory is specified.- Parameters:
url- the LDAP url.- See Also:
-
setSystemUsername
Used when initializing the defaultLdapContextFactory. This property is ignored if a custom LdapContextFactory is specified.- Parameters:
systemUsername- the username to use when logging into the LDAP server for authorization.- See Also:
-
setSystemPassword
Used when initializing the defaultLdapContextFactory. This property is ignored if a custom LdapContextFactory is specified.- Parameters:
systemPassword- the password to use when logging into the LDAP server for authorization.- See Also:
-
setLdapContextFactory
Configures theLdapContextFactoryimplementation that is used to create LDAP connections for authentication and authorization. If this is set, theLdapContextFactoryprovided will be used. Otherwise, aJndiLdapContextFactoryinstance will be created based on the properties specified in this realm.- Parameters:
ldapContextFactory- the factory to use - if not specified, a default factory will be created automatically.
-
setSearchFilter
-
onInit
Description copied from class:AuthorizingRealmInitializes this realm and potentially enables a cache, depending on configuration. When this method is called, the following logic is executed:- If the
cacheproperty has been set, it will be used to cache the AuthorizationInfo objects returned fromAuthorizingRealm.getAuthorizationInfo(org.apache.shiro.subject.PrincipalCollection)method invocations. All future calls togetAuthorizationInfowill attempt to use this cache first to alleviate any potentially unnecessary calls to an underlying data store. - If the
cacheproperty has not been set, thecacheManagerproperty will be checked. If acacheManagerhas been set, it will be used to create an authorizationcache, and this newly created cache which will be used as specified in #1. - If neither the
(org.apache.shiro.cache.Cache) cacheorcacheManagerproperties are set, caching will be disabled and authorization look-ups will be delegated to subclass implementations for each authorization check.
- Overrides:
onInitin classAuthorizingRealm
- If the
-
doGetAuthenticationInfo
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException Description copied from class:AuthenticatingRealmRetrieves authentication data from an implementation-specific datasource (RDBMS, LDAP, etc.) for the given authentication token. For most datasources, this means just 'pulling' authentication data for an associated subject/user and nothing more and letting Shiro do the rest. But in some systems, this method could actually perform EIS specific log-in logic in addition to just retrieving data - it is up to the Realm implementation. Anullreturn value means that no account could be associated with the specified token.- Specified by:
doGetAuthenticationInfoin classAuthenticatingRealm- Parameters:
token- the authentication token containing the user's principal and credentials.- Returns:
- an
AuthenticationInfoobject containing account data resulting from the authentication ONLY if the lookup is successful (i.e. account exists and is valid, etc.) - Throws:
AuthenticationException- if there is an error acquiring data or performing realm-specific authentication logic for the specified token
-
doGetAuthorizationInfo
Description copied from class:AuthorizingRealmRetrieves the AuthorizationInfo for the given principals from the underlying data store. When returning an instance from this method, you might want to consider using an instance ofSimpleAuthorizationInfo, as it is suitable in most cases.- Specified by:
doGetAuthorizationInfoin classAuthorizingRealm- Parameters:
principals- the primary identifying principals of the AuthorizationInfo that should be retrieved.- Returns:
- the AuthorizationInfo associated with this principals.
- See Also:
-
queryForAuthenticationInfo
protected abstract AuthenticationInfo queryForAuthenticationInfo(AuthenticationToken token, LdapContextFactory ldapContextFactory) throws NamingException Abstract method that should be implemented by subclasses to builds an
AuthenticationInfoobject by querying the LDAP context for the specified username.- Parameters:
token- the authentication token given during authentication.ldapContextFactory- factory used to retrieve LDAP connections.- Returns:
- an
AuthenticationInfoinstance containing information retrieved from the LDAP server. - Throws:
NamingException- if any LDAP errors occur during the search.
-
queryForAuthorizationInfo
protected abstract AuthorizationInfo queryForAuthorizationInfo(PrincipalCollection principal, LdapContextFactory ldapContextFactory) throws NamingException Abstract method that should be implemented by subclasses to builds an
AuthorizationInfoobject by querying the LDAP context for the specified principal.- Parameters:
principal- the principal of the Subject whose AuthenticationInfo should be queried from the LDAP server.ldapContextFactory- factory used to retrieve LDAP connections.- Returns:
- an
AuthorizationInfoinstance containing information retrieved from the LDAP server. - Throws:
NamingException- if any LDAP errors occur during the search.
-