in src/main/java/org/apache/sling/auth/form/impl/FormAuthenticationHandler.java [229:294]
public boolean requestCredentials(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 0. ignore this handler if an authentication handler is requested
if (ignoreRequestCredentials(request)) {
// consider this handler is not used
return false;
}
// check the referrer to see if the request is for this handler
if (!AuthUtil.checkReferer(request, loginForm)) {
// not for this handler, so return
return false;
}
final String resource = AuthUtil.setLoginResourceAttribute(request, request.getRequestURI());
if (includeLoginForm && (resourceResolverFactory != null)) {
ResourceResolver resourceResolver = null;
try {
resourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);
Resource loginFormResource = resourceResolver.resolve(loginForm);
Servlet loginFormServlet = loginFormResource.adaptTo(Servlet.class);
if (loginFormServlet != null) {
loginFormServlet.service(request, response);
return true;
}
} catch (ServletException e) {
log.error("Failed to include the form: " + loginForm, e);
} catch (LoginException e) {
log.error(
"Unable to get a resource resolver to include for the login resource. Will redirect instead.");
} finally {
if (resourceResolver != null) {
resourceResolver.close();
}
}
}
HashMap<String, String> params = new HashMap<>();
params.put(Authenticator.LOGIN_RESOURCE, resource);
// append indication of previous login failure
if (preferReasonCode) {
if (request.getAttribute(FAILURE_REASON_CODE) != null) {
final Object jReasonCode = request.getAttribute(FAILURE_REASON_CODE);
@SuppressWarnings("rawtypes")
final String reasonCode = (jReasonCode instanceof Enum) ? ((Enum) jReasonCode).name() : jReasonCode.toString();
params.put(FAILURE_REASON_CODE, reasonCode);
}
} else {
if (request.getAttribute(FAILURE_REASON) != null) {
final Object jReason = request.getAttribute(FAILURE_REASON);
@SuppressWarnings("rawtypes")
final String reason = (jReason instanceof Enum) ? ((Enum) jReason).name() : jReason.toString();
params.put(FAILURE_REASON, reason);
}
}
try {
AuthUtil.sendRedirect(request, response, request.getContextPath() + loginForm, params);
} catch (IOException e) {
log.error("Failed to redirect to the login form " + loginForm, e);
}
return true;
}