private boolean getResolver(final HttpServletRequest request,
final HttpServletResponse response,
final AuthenticationInfo authInfo) {
// prepare the feedback handler
final AuthenticationFeedbackHandler feedbackHandler = (AuthenticationFeedbackHandler) authInfo.remove(AUTH_INFO_PROP_FEEDBACK_HANDLER);
final Object sendLoginEvent = authInfo.remove(AuthConstants.AUTH_INFO_LOGIN);
// try to connect
try {
handleImpersonation(request, authInfo);
handlePasswordChange(request, authInfo);
ResourceResolver resolver = resourceResolverFactory.getResourceResolver(authInfo);
final boolean impersChanged = setSudoCookie(request, response, authInfo);
if (sendLoginEvent != null) {
postLoginEvent(authInfo);
}
// provide the resource resolver to the feedback handler
request.setAttribute(REQUEST_ATTRIBUTE_RESOLVER, resolver);
boolean processRequest = true;
// custom feedback handler with option to redirect
if (feedbackHandler != null) {
processRequest = !feedbackHandler.authenticationSucceeded(request, response, authInfo);
}
if (processRequest) {
if (AuthUtil.isValidateRequest(request)) {
AuthUtil.sendValid(response);
processRequest = false;
} else if (impersChanged || feedbackHandler == null) {
processRequest = !DefaultAuthenticationFeedbackHandler.handleRedirect(request, response);
}
}
if (processRequest) {
// process: set required attributes
setAttributes(resolver, authInfo.getAuthType(), request);
} else {
// terminate: cleanup
resolver.close();
}
return processRequest;
} catch (LoginException re) {
// handle failure feedback before proceeding to handling the
// failed login internally
if (feedbackHandler != null) {
feedbackHandler.authenticationFailed(request, response,
authInfo);
}
// now find a way to get credentials unless the feedback handler
// has committed a response to the client already