org.ldaptive.beans.spring.parser.AbstractAuthenticatorBeanDefinitionParser Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ldaptive-beans Show documentation
Show all versions of ldaptive-beans Show documentation
Provides a mapping, persistence, and code generation API for reading and writing POJOs to an LDAP directory
/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.beans.spring.parser;
import org.ldaptive.auth.Authenticator;
import org.ldaptive.auth.BindAuthenticationHandler;
import org.ldaptive.auth.PooledBindAuthenticationHandler;
import org.ldaptive.auth.ext.ActiveDirectoryAuthenticationResponseHandler;
import org.ldaptive.auth.ext.EDirectoryAuthenticationResponseHandler;
import org.ldaptive.auth.ext.FreeIPAAuthenticationResponseHandler;
import org.ldaptive.auth.ext.PasswordExpirationAuthenticationResponseHandler;
import org.ldaptive.auth.ext.PasswordPolicyAuthenticationResponseHandler;
import org.ldaptive.control.PasswordPolicyControl;
import org.ldaptive.pool.PooledConnectionFactory;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.w3c.dom.Element;
/**
* Common implementation for all authenticators.
*
* @author Middleware Services
*/
public abstract class AbstractAuthenticatorBeanDefinitionParser extends AbstractConnectionPoolBeanDefinitionParser
{
@Override
protected Class> getBeanClass(final Element element)
{
return Authenticator.class;
}
/**
* Creates a pooled authentication handler for performing binds.
*
* @param element containing configuration
*
* @return pooled bind authentication handler bean definition builder
*/
protected BeanDefinitionBuilder parseAuthHandler(final Element element)
{
BeanDefinitionBuilder authHandler;
if (element.getAttribute("disablePooling") != null && Boolean.valueOf(element.getAttribute("disablePooling"))) {
authHandler = BeanDefinitionBuilder.genericBeanDefinition(BindAuthenticationHandler.class);
authHandler.addPropertyValue(
"connectionFactory",
parseDefaultConnectionFactory(null, element, false).getBeanDefinition());
} else {
String name = "bind-pool";
if (element.hasAttribute("id")) {
name = element.getAttribute("id") + "-bind-pool";
}
authHandler = BeanDefinitionBuilder.genericBeanDefinition(PooledBindAuthenticationHandler.class);
final BeanDefinitionBuilder connectionFactory = BeanDefinitionBuilder.genericBeanDefinition(
PooledConnectionFactory.class);
connectionFactory.addPropertyValue(
"connectionPool",
parseConnectionPool(null, name, element, false).getBeanDefinition());
authHandler.addPropertyValue("connectionFactory", connectionFactory.getBeanDefinition());
}
return authHandler;
}
/**
* Creates an authentication response handler bean definition builder. The supplied authentication handler will be
* updated with any necessary request controls that the response handler may require.
*
* @param authenticator bean definition builder for the authenticator
* @param authHandler bean definition builder for the authentication handler
* @param element containing authentication response handler
*
* @return authentication response handler bean definition builder
*/
protected BeanDefinitionBuilder parseAuthResponseHandler(
final BeanDefinitionBuilder authenticator,
final BeanDefinitionBuilder authHandler,
final Element element)
{
BeanDefinitionBuilder responseHandler = null;
BeanDefinitionBuilder requestControls = null;
final Element handlerElement = getDirectChild(
getDirectChild(element, "authentication-response-handler"),
"password-policy-handler",
"password-expiration-handler",
"e-directory-handler",
"free-ipa-handler",
"active-directory-handler");
if (handlerElement != null) {
switch (handlerElement.getLocalName()) {
case "password-policy-handler":
responseHandler = BeanDefinitionBuilder.genericBeanDefinition(
PasswordPolicyAuthenticationResponseHandler.class);
requestControls = BeanDefinitionBuilder.genericBeanDefinition(PasswordPolicyControl.class);
break;
case "password-expiration-handler":
responseHandler = BeanDefinitionBuilder.genericBeanDefinition(
PasswordExpirationAuthenticationResponseHandler.class);
break;
case "e-directory-handler":
responseHandler = BeanDefinitionBuilder.genericBeanDefinition(
EDirectoryAuthenticationResponseHandler.class);
if (handlerElement.hasAttribute("warningPeriod")) {
final BeanDefinitionBuilder period = BeanDefinitionBuilder.rootBeanDefinition(
AbstractAuthenticatorBeanDefinitionParser.class,
"parsePeriod");
period.addConstructorArgValue(handlerElement.getAttribute("warningPeriod"));
responseHandler.addPropertyValue("warningPeriod", period.getBeanDefinition());
}
authenticator.addPropertyValue("returnAttributes", EDirectoryAuthenticationResponseHandler.ATTRIBUTES);
break;
case "free-ipa-handler":
responseHandler = BeanDefinitionBuilder.genericBeanDefinition(FreeIPAAuthenticationResponseHandler.class);
if (handlerElement.hasAttribute("expirationPeriod")) {
final BeanDefinitionBuilder period = BeanDefinitionBuilder.rootBeanDefinition(
AbstractAuthenticatorBeanDefinitionParser.class,
"parsePeriod");
period.addConstructorArgValue(handlerElement.getAttribute("expirationPeriod"));
responseHandler.addPropertyValue("expirationPeriod", period.getBeanDefinition());
}
if (handlerElement.hasAttribute("warningPeriod")) {
final BeanDefinitionBuilder period = BeanDefinitionBuilder.rootBeanDefinition(
AbstractAuthenticatorBeanDefinitionParser.class,
"parsePeriod");
period.addConstructorArgValue(handlerElement.getAttribute("warningPeriod"));
responseHandler.addPropertyValue("warningPeriod", period.getBeanDefinition());
}
if (handlerElement.hasAttribute("maxLoginFailures")) {
responseHandler.addPropertyValue("maxLoginFailures", handlerElement.getAttribute("maxLoginFailures"));
}
authenticator.addPropertyValue("returnAttributes", FreeIPAAuthenticationResponseHandler.ATTRIBUTES);
break;
case "active-directory-handler":
responseHandler = BeanDefinitionBuilder.genericBeanDefinition(
ActiveDirectoryAuthenticationResponseHandler.class);
if (handlerElement.hasAttribute("expirationPeriod")) {
final BeanDefinitionBuilder period = BeanDefinitionBuilder.rootBeanDefinition(
AbstractAuthenticatorBeanDefinitionParser.class,
"parsePeriod");
period.addConstructorArgValue(handlerElement.getAttribute("expirationPeriod"));
responseHandler.addPropertyValue("expirationPeriod", period.getBeanDefinition());
}
if (handlerElement.hasAttribute("warningPeriod")) {
final BeanDefinitionBuilder period = BeanDefinitionBuilder.rootBeanDefinition(
AbstractAuthenticatorBeanDefinitionParser.class,
"parsePeriod");
period.addConstructorArgValue(handlerElement.getAttribute("warningPeriod"));
responseHandler.addPropertyValue("warningPeriod", period.getBeanDefinition());
}
authenticator.addPropertyValue("returnAttributes", ActiveDirectoryAuthenticationResponseHandler.ATTRIBUTES);
break;
default:
throw new IllegalArgumentException("Unknown authentication response handler: " + handlerElement.getLocalName());
}
}
if (requestControls != null) {
authHandler.addPropertyValue("authenticationControls", requestControls.getBeanDefinition());
}
return responseHandler;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy