NIHVIVO-2696 Refactor LoginRedirector to make it more flexible - usable from Freemarker controllers.

This commit is contained in:
j2blake 2011-06-10 18:53:35 +00:00
parent 0f00fd7a08
commit ac97b5792a
3 changed files with 49 additions and 43 deletions

View file

@ -57,7 +57,7 @@ public class LoginExternalAuthReturn extends BaseLoginServlet {
getAuthenticator(req).recordLoginAgainstUserAccount(userAccount,
AuthenticationSource.EXTERNAL);
removeLoginProcessArtifacts(req);
new LoginRedirector(req, resp).redirectLoggedInUser();
new LoginRedirector(req).redirectLoggedInUser(resp);
return;
}
@ -71,14 +71,14 @@ public class LoginExternalAuthReturn extends BaseLoginServlet {
getAuthenticator(req).recordLoginWithoutUserAccount(uri);
removeLoginProcessArtifacts(req);
new LoginRedirector(req, resp).redirectLoggedInUser();
new LoginRedirector(req).redirectLoggedInUser(resp);
return;
}
log.debug("User is not recognized: " + externalAuthId);
removeLoginProcessArtifacts(req);
new LoginRedirector(req, resp)
.redirectUnrecognizedExternalUser(externalAuthId);
new LoginRedirector(req).redirectUnrecognizedExternalUser(resp,
externalAuthId);
}
private void removeLoginProcessArtifacts(HttpServletRequest req) {

View file

@ -29,17 +29,14 @@ public class LoginRedirector {
private static final Log log = LogFactory.getLog(LoginRedirector.class);
private final HttpServletRequest request;
private final HttpServletResponse response;
private final HttpSession session;
private final String uriOfAssociatedIndividual;
private final String afterLoginPage;
public LoginRedirector(HttpServletRequest request,
HttpServletResponse response) {
public LoginRedirector(HttpServletRequest request) {
this.request = request;
this.session = request.getSession();
this.response = response;
uriOfAssociatedIndividual = getAssociatedIndividualUri();
@ -70,28 +67,45 @@ public class LoginRedirector {
}
}
public void redirectLoggedInUser() throws IOException {
DisplayMessage.setMessage(request, assembleWelcomeMessage());
try {
public String getRedirectionUriForLoggedInUser() {
if (isSelfEditorWithIndividual()) {
log.debug("Going to Individual home page.");
response.sendRedirect(getAssociatedIndividualHomePage());
return getAssociatedIndividualHomePage();
} else if (isMerelySelfEditor()) {
log.debug("User not recognized. Going to application home.");
response.sendRedirect(getApplicationHomePageUrl());
return getApplicationHomePageUrl();
} else {
if (isLoginPage(afterLoginPage)) {
log.debug("Coming from /login. Going to site admin page.");
response.sendRedirect(getSiteAdminPageUrl());
return getSiteAdminPageUrl();
} else if (null != afterLoginPage) {
log.debug("Returning to requested page: " + afterLoginPage);
response.sendRedirect(afterLoginPage);
return afterLoginPage;
} else {
log.debug("Don't know what to do. Go home.");
response.sendRedirect(getApplicationHomePageUrl());
return getApplicationHomePageUrl();
}
}
}
public String getRedirectionUriForCancellingUser() {
if (isLoginPage(afterLoginPage)) {
log.debug("Coming from /login. Going to home.");
return getApplicationHomePageUrl();
} else if (null != afterLoginPage) {
log.debug("Returning to requested page: " + afterLoginPage);
return afterLoginPage;
} else {
log.debug("Don't know what to do. Go home.");
return getApplicationHomePageUrl();
}
}
public void redirectLoggedInUser(HttpServletResponse response)
throws IOException {
try {
DisplayMessage.setMessage(request, assembleWelcomeMessage());
response.sendRedirect(getRedirectionUriForLoggedInUser());
LoginProcessBean.removeBean(request);
} catch (IOException e) {
log.debug("Problem with re-direction", e);
@ -124,18 +138,10 @@ public class LoginRedirector {
return "Welcome" + backString + ", " + greeting;
}
public void redirectCancellingUser() throws IOException {
public void redirectCancellingUser(HttpServletResponse response)
throws IOException {
try {
if (isLoginPage(afterLoginPage)) {
log.debug("Coming from /login. Going to home.");
response.sendRedirect(getApplicationHomePageUrl());
} else if (null != afterLoginPage) {
log.debug("Returning to requested page: " + afterLoginPage);
response.sendRedirect(afterLoginPage);
} else {
log.debug("Don't know what to do. Go home.");
response.sendRedirect(getApplicationHomePageUrl());
}
response.sendRedirect(getRedirectionUriForCancellingUser());
LoginProcessBean.removeBean(request);
} catch (IOException e) {
log.debug("Problem with re-direction", e);
@ -143,8 +149,8 @@ public class LoginRedirector {
}
}
public void redirectUnrecognizedExternalUser(String username)
throws IOException {
public void redirectUnrecognizedExternalUser(HttpServletResponse response,
String username) throws IOException {
log.debug("Redirecting unrecognized external user: " + username);
DisplayMessage.setMessage(request,
"VIVO cannot find a profile for your account.");

View file

@ -124,7 +124,7 @@ public class Authenticate extends VitroHttpServlet {
// Send them on their way.
switch (exitState) {
case NOWHERE:
new LoginRedirector(vreq, response).redirectCancellingUser();
new LoginRedirector(vreq).redirectCancellingUser(response);
break;
case LOGGING_IN:
showLoginScreen(vreq, response);
@ -133,7 +133,7 @@ public class Authenticate extends VitroHttpServlet {
showLoginScreen(vreq, response);
break;
default: // LOGGED_IN:
new LoginRedirector(vreq, response).redirectLoggedInUser();
new LoginRedirector(vreq).redirectLoggedInUser(response);
break;
}
} catch (Exception e) {