package org.apereo.cas.web.flow; import org.apereo.cas.authentication.Credential; import org.apereo.cas.authentication.UsernamePasswordCredential; 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.pac4j.core.context.WebContext; import org.pac4j.core.credentials.UsernamePasswordCredentials; import org.pac4j.core.credentials.extractor.BasicAuthExtractor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.webflow.execution.RequestContext; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * This is {@link BasicAuthenticationAction} that extracts basic authN credentials from the request. * * @author Misagh Moayyed * @since 4.2.0 */ public class BasicAuthenticationAction extends AbstractNonInteractiveCredentialsAction { private static final Logger LOGGER = LoggerFactory.getLogger(BasicAuthenticationAction.class); public BasicAuthenticationAction(final CasDelegatingWebflowEventResolver initialAuthenticationAttemptWebflowEventResolver, final CasWebflowEventResolver serviceTicketRequestWebflowEventResolver, final AdaptiveAuthenticationPolicy adaptiveAuthenticationPolicy) { super(initialAuthenticationAttemptWebflowEventResolver, serviceTicketRequestWebflowEventResolver, adaptiveAuthenticationPolicy); } @Override protected Credential constructCredentialsFromRequest(final RequestContext requestContext) { try { final HttpServletRequest request = WebUtils.getHttpServletRequest(requestContext); final HttpServletResponse response = WebUtils.getHttpServletResponse(requestContext); final BasicAuthExtractor extractor = new BasicAuthExtractor(this.getClass().getSimpleName()); final WebContext webContext = WebUtils.getPac4jJ2EContext(request, response); final UsernamePasswordCredentials credentials = extractor.extract(webContext); if (credentials != null) { LOGGER.debug("Received basic authentication request from credentials [{}]", credentials); return new UsernamePasswordCredential(credentials.getUsername(), credentials.getPassword()); } } catch (final Exception e) { LOGGER.warn(e.getMessage(), e); } return null; } }