NIHVIVO-1207 Make LoginProcessBean more encapsulated.
This commit is contained in:
parent
c6ff668647
commit
dcb358d4c8
5 changed files with 103 additions and 63 deletions
|
@ -130,7 +130,7 @@ public class Authenticate extends FreemarkerHttpServlet {
|
||||||
String username = request.getParameter(PARAMETER_USERNAME);
|
String username = request.getParameter(PARAMETER_USERNAME);
|
||||||
String password = request.getParameter(PARAMETER_PASSWORD);
|
String password = request.getParameter(PARAMETER_PASSWORD);
|
||||||
|
|
||||||
LoginProcessBean bean = getLoginProcessBean(request);
|
LoginProcessBean bean = LoginProcessBean.getBean(request);
|
||||||
bean.clearMessage();
|
bean.clearMessage();
|
||||||
log.trace("username=" + username + ", password=" + password + ", bean="
|
log.trace("username=" + username + ", password=" + password + ", bean="
|
||||||
+ bean);
|
+ bean);
|
||||||
|
@ -170,7 +170,7 @@ public class Authenticate extends FreemarkerHttpServlet {
|
||||||
private void whatNextForThisGuy(HttpServletRequest request, User user) {
|
private void whatNextForThisGuy(HttpServletRequest request, User user) {
|
||||||
if (user.getLoginCount() == 0) {
|
if (user.getLoginCount() == 0) {
|
||||||
log.debug("Forcing first-time password change");
|
log.debug("Forcing first-time password change");
|
||||||
LoginProcessBean bean = getLoginProcessBean(request);
|
LoginProcessBean bean = LoginProcessBean.getBean(request);
|
||||||
bean.setState(State.FORCED_PASSWORD_CHANGE);
|
bean.setState(State.FORCED_PASSWORD_CHANGE);
|
||||||
} else {
|
} else {
|
||||||
recordLoginInfo(request, user.getUsername());
|
recordLoginInfo(request, user.getUsername());
|
||||||
|
@ -191,7 +191,7 @@ public class Authenticate extends FreemarkerHttpServlet {
|
||||||
* If they want to cancel the login, let them.
|
* If they want to cancel the login, let them.
|
||||||
*/
|
*/
|
||||||
private void recordLoginCancelled(HttpServletRequest request) {
|
private void recordLoginCancelled(HttpServletRequest request) {
|
||||||
getLoginProcessBean(request).setState(State.CANCELLED);
|
LoginProcessBean.getBean(request).setState(State.CANCELLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -200,7 +200,7 @@ public class Authenticate extends FreemarkerHttpServlet {
|
||||||
private User checkChangeProgress(HttpServletRequest request) {
|
private User checkChangeProgress(HttpServletRequest request) {
|
||||||
String newPassword = request.getParameter(PARAMETER_NEW_PASSWORD);
|
String newPassword = request.getParameter(PARAMETER_NEW_PASSWORD);
|
||||||
String confirm = request.getParameter(PARAMETER_CONFIRM_PASSWORD);
|
String confirm = request.getParameter(PARAMETER_CONFIRM_PASSWORD);
|
||||||
LoginProcessBean bean = getLoginProcessBean(request);
|
LoginProcessBean bean = LoginProcessBean.getBean(request);
|
||||||
bean.clearMessage();
|
bean.clearMessage();
|
||||||
log.trace("newPassword=" + newPassword + ", confirm=" + confirm
|
log.trace("newPassword=" + newPassword + ", confirm=" + confirm
|
||||||
+ ", bean=" + bean);
|
+ ", bean=" + bean);
|
||||||
|
@ -261,8 +261,7 @@ public class Authenticate extends FreemarkerHttpServlet {
|
||||||
getAuthenticator(request).setLoggedIn(user);
|
getAuthenticator(request).setLoggedIn(user);
|
||||||
|
|
||||||
// Remove the login process info from the session.
|
// Remove the login process info from the session.
|
||||||
request.getSession()
|
LoginProcessBean.removeBean(request);
|
||||||
.removeAttribute(LoginProcessBean.SESSION_ATTRIBUTE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -280,10 +279,8 @@ public class Authenticate extends FreemarkerHttpServlet {
|
||||||
*/
|
*/
|
||||||
private void redirectCancellingUser(HttpServletRequest request,
|
private void redirectCancellingUser(HttpServletRequest request,
|
||||||
HttpServletResponse response) throws IOException {
|
HttpServletResponse response) throws IOException {
|
||||||
request.getSession()
|
|
||||||
.removeAttribute(LoginProcessBean.SESSION_ATTRIBUTE);
|
|
||||||
|
|
||||||
log.debug("User cancelled the login. Redirect to site admin page.");
|
log.debug("User cancelled the login. Redirect to site admin page.");
|
||||||
|
LoginProcessBean.removeBean(request);
|
||||||
response.sendRedirect(getHomeUrl(request));
|
response.sendRedirect(getHomeUrl(request));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -384,15 +381,15 @@ public class Authenticate extends FreemarkerHttpServlet {
|
||||||
return State.LOGGED_IN;
|
return State.LOGGED_IN;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (session.getAttribute(LoginProcessBean.SESSION_ATTRIBUTE) == null) {
|
if (LoginProcessBean.isBean(request)) {
|
||||||
|
State state = LoginProcessBean.getBean(request).getState();
|
||||||
|
log.debug("state from LoginProcessBean is " + state);
|
||||||
|
return state;
|
||||||
|
} else {
|
||||||
log.debug("no LoginSessionBean, no LoginProcessBean: "
|
log.debug("no LoginSessionBean, no LoginProcessBean: "
|
||||||
+ "current state is NOWHERE");
|
+ "current state is NOWHERE");
|
||||||
return State.NOWHERE;
|
return State.NOWHERE;
|
||||||
}
|
}
|
||||||
|
|
||||||
State state = getLoginProcessBean(request).getState();
|
|
||||||
log.debug("state from LoginProcessBean is " + state);
|
|
||||||
return state;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -432,11 +429,6 @@ public class Authenticate extends FreemarkerHttpServlet {
|
||||||
return request.getContextPath();
|
return request.getContextPath();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Where do we stand in the login process? */
|
|
||||||
private LoginProcessBean getLoginProcessBean(HttpServletRequest request) {
|
|
||||||
return LoginProcessBean.getBeanFromSession(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
// Public utility methods.
|
// Public utility methods.
|
||||||
// ----------------------------------------------------------------------
|
// ----------------------------------------------------------------------
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class Login extends HttpServlet {
|
||||||
* Otherwise, set up as if they had filled in the login form, and send
|
* Otherwise, set up as if they had filled in the login form, and send
|
||||||
* them to authenticate it.
|
* them to authenticate it.
|
||||||
*/
|
*/
|
||||||
LoginProcessBean bean = LoginProcessBean.getBeanFromSession(request);
|
LoginProcessBean bean = LoginProcessBean.getBean(request);
|
||||||
bean.setState(LoginProcessBean.State.LOGGING_IN);
|
bean.setState(LoginProcessBean.State.LOGGING_IN);
|
||||||
request.getRequestDispatcher(Controllers.AUTHENTICATE).forward(request,
|
request.getRequestDispatcher(Controllers.AUTHENTICATE).forward(request,
|
||||||
response);
|
response);
|
||||||
|
|
|
@ -8,31 +8,91 @@ import java.util.Arrays;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpSession;
|
import javax.servlet.http.HttpSession;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Where are we in the process of logging on? What message should we show to the
|
* Where are we in the process of logging on? What message should we show to the
|
||||||
* user?
|
* user?
|
||||||
*/
|
*/
|
||||||
public class LoginProcessBean {
|
public class LoginProcessBean {
|
||||||
|
private static final Log log = LogFactory.getLog(LoginProcessBean.class);
|
||||||
|
|
||||||
private static Object[] NO_ARGUMENTS = new Object[0];
|
private static Object[] NO_ARGUMENTS = new Object[0];
|
||||||
|
|
||||||
public static final String SESSION_ATTRIBUTE = LoginProcessBean.class
|
private static final String SESSION_ATTRIBUTE = LoginProcessBean.class
|
||||||
.getName();
|
.getName();
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// static methods
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the login process bean from the session. If there is none, create
|
* Is there currently a login process bean in the session?
|
||||||
|
*/
|
||||||
|
public static boolean isBean(HttpServletRequest request) {
|
||||||
|
return (null != getBeanFromSession(request));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the login process bean from the session. If there is no bean, create
|
||||||
* one.
|
* one.
|
||||||
*/
|
*/
|
||||||
public static LoginProcessBean getBeanFromSession(HttpServletRequest request) {
|
public static LoginProcessBean getBean(HttpServletRequest request) {
|
||||||
HttpSession session = request.getSession();
|
if (isBean(request)) {
|
||||||
LoginProcessBean bean = (LoginProcessBean) session
|
return getBeanFromSession(request);
|
||||||
.getAttribute(SESSION_ATTRIBUTE);
|
} else {
|
||||||
if (bean == null) {
|
setBean(request, new LoginProcessBean());
|
||||||
bean = new LoginProcessBean();
|
return getBeanFromSession(request);
|
||||||
session.setAttribute(SESSION_ATTRIBUTE, bean);
|
|
||||||
}
|
}
|
||||||
return bean;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Store this login process bean in the session.
|
||||||
|
*/
|
||||||
|
public static void setBean(HttpServletRequest request, LoginProcessBean bean) {
|
||||||
|
HttpSession session = request.getSession();
|
||||||
|
session.setAttribute(SESSION_ATTRIBUTE, bean);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Remove the login process bean from the session. If there is no bean, do
|
||||||
|
* nothing.
|
||||||
|
*/
|
||||||
|
public static void removeBean(HttpServletRequest request) {
|
||||||
|
if (isBean(request)) {
|
||||||
|
request.getSession().removeAttribute(SESSION_ATTRIBUTE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the bean from the session, or null if there is no bean.
|
||||||
|
*/
|
||||||
|
private static LoginProcessBean getBeanFromSession(
|
||||||
|
HttpServletRequest request) {
|
||||||
|
HttpSession session = request.getSession(false);
|
||||||
|
if (session == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object bean = session.getAttribute(SESSION_ATTRIBUTE);
|
||||||
|
if (bean == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(bean instanceof LoginProcessBean)) {
|
||||||
|
log.warn("Tried to get login process bean, but found an instance of "
|
||||||
|
+ bean.getClass().getName() + ": " + bean);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (LoginProcessBean) bean;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// helper classes
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
public enum State {
|
public enum State {
|
||||||
NOWHERE, LOGGING_IN, FORCED_PASSWORD_CHANGE, CANCELLED, LOGGED_IN
|
NOWHERE, LOGGING_IN, FORCED_PASSWORD_CHANGE, CANCELLED, LOGGED_IN
|
||||||
}
|
}
|
||||||
|
@ -89,6 +149,10 @@ public class LoginProcessBean {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
// the bean
|
||||||
|
// ----------------------------------------------------------------------
|
||||||
|
|
||||||
/** Where are we in the process? */
|
/** Where are we in the process? */
|
||||||
private State currentState = State.NOWHERE;
|
private State currentState = State.NOWHERE;
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@ import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpSession;
|
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
@ -101,7 +100,7 @@ public class LoginTemplateHelper extends LoginTemplateHelperBase {
|
||||||
*/
|
*/
|
||||||
private TemplateResponseValues showLoginScreen(VitroRequest vreq)
|
private TemplateResponseValues showLoginScreen(VitroRequest vreq)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
LoginProcessBean bean = getLoginProcessBean(vreq);
|
LoginProcessBean bean = LoginProcessBean.getBean(vreq);
|
||||||
bean.setState(State.LOGGING_IN);
|
bean.setState(State.LOGGING_IN);
|
||||||
log.trace("Going to login screen: " + bean);
|
log.trace("Going to login screen: " + bean);
|
||||||
|
|
||||||
|
@ -126,7 +125,7 @@ public class LoginTemplateHelper extends LoginTemplateHelperBase {
|
||||||
* change it (unless they cancel out).
|
* change it (unless they cancel out).
|
||||||
*/
|
*/
|
||||||
private TemplateResponseValues showPasswordChangeScreen(VitroRequest vreq) {
|
private TemplateResponseValues showPasswordChangeScreen(VitroRequest vreq) {
|
||||||
LoginProcessBean bean = getLoginProcessBean(vreq);
|
LoginProcessBean bean = LoginProcessBean.getBean(vreq);
|
||||||
bean.setState(State.FORCED_PASSWORD_CHANGE);
|
bean.setState(State.FORCED_PASSWORD_CHANGE);
|
||||||
log.trace("Going to password change screen: " + bean);
|
log.trace("Going to password change screen: " + bean);
|
||||||
|
|
||||||
|
@ -173,27 +172,10 @@ public class LoginTemplateHelper extends LoginTemplateHelperBase {
|
||||||
if (LoginStatusBean.getBean(request).isLoggedIn()) {
|
if (LoginStatusBean.getBean(request).isLoggedIn()) {
|
||||||
return State.LOGGED_IN;
|
return State.LOGGED_IN;
|
||||||
} else {
|
} else {
|
||||||
return getLoginProcessBean(request).getState();
|
return LoginProcessBean.getBean(request).getState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* How is the login process coming along?
|
|
||||||
*/
|
|
||||||
private LoginProcessBean getLoginProcessBean(HttpServletRequest request) {
|
|
||||||
HttpSession session = request.getSession();
|
|
||||||
|
|
||||||
LoginProcessBean bean = (LoginProcessBean) session
|
|
||||||
.getAttribute(LoginProcessBean.SESSION_ATTRIBUTE);
|
|
||||||
|
|
||||||
if (bean == null) {
|
|
||||||
bean = new LoginProcessBean();
|
|
||||||
session.setAttribute(LoginProcessBean.SESSION_ATTRIBUTE, bean);
|
|
||||||
}
|
|
||||||
|
|
||||||
return bean;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** What's the URL for this servlet? */
|
/** What's the URL for this servlet? */
|
||||||
private String getAuthenticateUrl(HttpServletRequest request) {
|
private String getAuthenticateUrl(HttpServletRequest request) {
|
||||||
String contextPath = request.getContextPath();
|
String contextPath = request.getContextPath();
|
||||||
|
|
|
@ -5,9 +5,8 @@ package edu.cornell.mannlib.vitro.webapp.controller.edit;
|
||||||
import static edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean.State.FORCED_PASSWORD_CHANGE;
|
import static edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean.State.FORCED_PASSWORD_CHANGE;
|
||||||
import static edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean.State.LOGGING_IN;
|
import static edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean.State.LOGGING_IN;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -28,7 +27,6 @@ import edu.cornell.mannlib.vedit.beans.LoginStatusBean;
|
||||||
import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
|
import edu.cornell.mannlib.vitro.testing.AbstractTestClass;
|
||||||
import edu.cornell.mannlib.vitro.webapp.beans.User;
|
import edu.cornell.mannlib.vitro.webapp.beans.User;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
|
import edu.cornell.mannlib.vitro.webapp.controller.Controllers;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.authenticate.Authenticator;
|
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.authenticate.AuthenticatorStub;
|
import edu.cornell.mannlib.vitro.webapp.controller.authenticate.AuthenticatorStub;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean;
|
import edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean;
|
||||||
import edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean.State;
|
import edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean.State;
|
||||||
|
@ -331,14 +329,14 @@ public class AuthenticateTest extends AbstractTestClass {
|
||||||
private void setProcessBean(State state) {
|
private void setProcessBean(State state) {
|
||||||
LoginProcessBean processBean = new LoginProcessBean();
|
LoginProcessBean processBean = new LoginProcessBean();
|
||||||
processBean.setState(state);
|
processBean.setState(state);
|
||||||
session.setAttribute(LoginProcessBean.SESSION_ATTRIBUTE, processBean);
|
LoginProcessBean.setBean(request, processBean);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setProcessBean(State state, String username) {
|
private void setProcessBean(State state, String username) {
|
||||||
LoginProcessBean processBean = new LoginProcessBean();
|
LoginProcessBean processBean = new LoginProcessBean();
|
||||||
processBean.setState(state);
|
processBean.setState(state);
|
||||||
processBean.setUsername(username);
|
processBean.setUsername(username);
|
||||||
session.setAttribute(LoginProcessBean.SESSION_ATTRIBUTE, processBean);
|
LoginProcessBean.setBean(request, processBean);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setLoginNameAndPassword(String loginName, String password) {
|
private void setLoginNameAndPassword(String loginName, String password) {
|
||||||
|
@ -363,15 +361,18 @@ public class AuthenticateTest extends AbstractTestClass {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertNoProcessBean() {
|
private void assertNoProcessBean() {
|
||||||
assertEquals("null process bean", null,
|
if (LoginProcessBean.isBean(request)) {
|
||||||
session.getAttribute(LoginProcessBean.SESSION_ATTRIBUTE));
|
fail("Process bean: expected <null>, but was <"
|
||||||
|
+ LoginProcessBean.getBean(request) + ">");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertExpectedProcessBean(State state, String username,
|
private void assertExpectedProcessBean(State state, String username,
|
||||||
String infoMessage, String errorMessage) {
|
String infoMessage, String errorMessage) {
|
||||||
LoginProcessBean bean = (LoginProcessBean) session
|
if (!LoginProcessBean.isBean(request)) {
|
||||||
.getAttribute(LoginProcessBean.SESSION_ATTRIBUTE);
|
fail("login process bean is null");
|
||||||
assertNotNull("login process bean", bean);
|
}
|
||||||
|
LoginProcessBean bean = LoginProcessBean.getBean(request);
|
||||||
assertEquals("state", state, bean.getState());
|
assertEquals("state", state, bean.getState());
|
||||||
assertEquals("info message", infoMessage, bean.getInfoMessage());
|
assertEquals("info message", infoMessage, bean.getInfoMessage());
|
||||||
assertEquals("error message", errorMessage, bean.getErrorMessage());
|
assertEquals("error message", errorMessage, bean.getErrorMessage());
|
||||||
|
@ -419,9 +420,10 @@ public class AuthenticateTest extends AbstractTestClass {
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
private void showBeans() {
|
private void showBeans() {
|
||||||
LoginProcessBean processBean = (LoginProcessBean) session
|
LoginProcessBean processBean = (LoginProcessBean.isBean(request)) ? LoginProcessBean
|
||||||
.getAttribute(LoginProcessBean.SESSION_ATTRIBUTE);
|
.getBean(request) : null;
|
||||||
System.out.println("LoginProcessBean=" + processBean);
|
System.out.println("LoginProcessBean=" + processBean);
|
||||||
|
|
||||||
LoginStatusBean statusBean = (LoginStatusBean) session
|
LoginStatusBean statusBean = (LoginStatusBean) session
|
||||||
.getAttribute("loginStatus");
|
.getAttribute("loginStatus");
|
||||||
System.out.println("LoginStatusBean=" + statusBean);
|
System.out.println("LoginStatusBean=" + statusBean);
|
||||||
|
|
Loading…
Add table
Reference in a new issue