package org.apereo.cas.web.flow;
import org.apereo.cas.authentication.Credential;
import org.apereo.cas.authentication.adaptive.AdaptiveAuthenticationPolicy;
import org.apereo.cas.web.flow.resolver.CasDelegatingWebflowEventResolver;
import org.apereo.cas.web.flow.resolver.CasWebflowEventResolver;
import org.apereo.cas.web.support.WebUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.webflow.execution.Event;
import org.springframework.webflow.execution.RequestContext;
/**
* Abstract class to handle the retrieval and authentication of non-interactive
* credential such as client certificates, NTLM, etc.
*
* @author Scott Battaglia
* @since 3.0.0
*/
public abstract class AbstractNonInteractiveCredentialsAction extends AbstractAuthenticationAction {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractNonInteractiveCredentialsAction.class);
public AbstractNonInteractiveCredentialsAction(final CasDelegatingWebflowEventResolver initialAuthenticationAttemptWebflowEventResolver,
final CasWebflowEventResolver serviceTicketRequestWebflowEventResolver,
final AdaptiveAuthenticationPolicy adaptiveAuthenticationPolicy) {
super(initialAuthenticationAttemptWebflowEventResolver, serviceTicketRequestWebflowEventResolver, adaptiveAuthenticationPolicy);
}
@Override
protected Event doPreExecute(final RequestContext context) throws Exception {
final Credential credential = constructCredentialsFromRequest(context);
if (credential == null) {
LOGGER.warn("No credentials detected. Navigating to error...");
return error();
}
WebUtils.putCredential(context, credential);
return super.doPreExecute(context);
}
/**
* Abstract method to implement to construct the credential from the
* request object.
*
* @param context the context for this request.
* @return the constructed credential or null if none could be constructed
* from the request.
*/
protected abstract Credential constructCredentialsFromRequest(RequestContext context);
}