org.wildfly.security.auth.server.MechanismAuthenticationFactory Maven / Gradle / Ivy
Go to download
This artifact provides a single jar that contains all classes required to use remote EJB and JMS, including
all dependencies. It is intended for use by those not using maven, maven users should just import the EJB and
JMS BOM's instead (shaded JAR's cause lots of problems with maven, as it is very easy to inadvertently end up
with different versions on classes on the class path).
/*
* JBoss, Home of Professional Open Source.
* Copyright 2015 Red Hat, Inc., and individual contributors
* as indicated by the @author tags.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wildfly.security.auth.server;
import java.util.Collection;
import java.util.function.UnaryOperator;
/**
* A generalized mechanism factory which authenticates against a security domain.
*
* @param the type of mechanism
* @param the type of the mechanism's factory
* @param the mechanism-type-specific exception that may be thrown upon instantiation
*
* @author David M. Lloyd
*/
public interface MechanismAuthenticationFactory {
/**
* Get the underlying {@link SecurityDomain} that mechanisms created by this factory will be using for authentication.
*
* @return the underlying {@link SecurityDomain} that mechanisms created by this factory will be using for authentication.
*/
SecurityDomain getSecurityDomain();
/**
* Get the actual factory used for instantiation.
*
* @return the actual factory (not {@code null})
*/
F getFactory();
/**
* Create the mechanism instance.
*
* @param name the mechanism name (must not be {@code null})
* @param factoryTransformation the transformation to apply to the factory (must not be {@code null})
* @return the mechanism, or {@code null} if the mechanism with the given name is not supported
* @throws E if the mechanism instantiation failed
*/
M createMechanism(String name, UnaryOperator factoryTransformation) throws E;
/**
* Create the mechanism instance.
*
* @param name the mechanism name (must not be {@code null})
* @return the mechanism, or {@code null} if the mechanism with the given name is not supported
* @throws E if the mechanism instantiation failed
*/
default M createMechanism(String name) throws E {
return createMechanism(name, UnaryOperator.identity());
}
/**
* Get the collection of mechanism names may be supported by this factory. The actual set of available mechanisms depends
* on run-time factors but will generally not be greater than this collection.
*
* @return the mechanism names (not {@code null})
*/
Collection getMechanismNames();
/**
* A builder for a {@link MechanismAuthenticationFactory}.
*
* @param the type of mechanism
* @param the type of the mechanism's factory
* @param the mechanism-type-specific exception that may be thrown upon instantiation
*/
interface Builder {
/**
* Set the security domain to be used for this factory (may not be {@code null}).
*
* @param securityDomain the security domain (may not be {@code null})
* @return this builder
*/
Builder setSecurityDomain(SecurityDomain securityDomain);
/**
* Set the {@link MechanismConfigurationSelector} for the factory being built.
*
* @param mechanismConfigurationSelector the {@link MechanismConfigurationSelector} for the factory being built.
* @return this builder
*/
Builder setMechanismConfigurationSelector(MechanismConfigurationSelector mechanismConfigurationSelector);
/**
* Set the mechanism's underlying factory.
*
* @param factory the factory (must not be {@code null})
* @return this builder
*/
Builder setFactory(F factory);
/**
* Build the mechanism factory.
*
* @return the mechanism factory
*/
MechanismAuthenticationFactory build();
}
}