X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Fwidgets%2Fauth%2FCmsLogin.java;h=578386321dd197a8b76cecfdb7dd215b6608c235;hb=dd9dbe09e816b1ffc50d03516f72e863525c2e71;hp=91c28078ee5fb33ba3523718dc09c39359230053;hpb=5146af93007c599cf9edb35d8b173753bc45a52f;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/widgets/auth/CmsLogin.java b/org.argeo.cms/src/org/argeo/cms/widgets/auth/CmsLogin.java index 91c28078e..578386321 100644 --- a/org.argeo.cms/src/org/argeo/cms/widgets/auth/CmsLogin.java +++ b/org.argeo.cms/src/org/argeo/cms/widgets/auth/CmsLogin.java @@ -17,10 +17,12 @@ import javax.security.auth.callback.LanguageCallback; import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; import javax.security.auth.callback.UnsupportedCallbackException; +import javax.security.auth.login.FailedLoginException; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; -import org.argeo.cms.CmsException; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsMsg; import org.argeo.cms.CmsStyles; import org.argeo.cms.CmsView; @@ -28,6 +30,7 @@ import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.auth.HttpRequestCallback; import org.argeo.cms.i18n.LocaleUtils; import org.argeo.cms.util.CmsUtils; +import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.argeo.util.LocaleChoice; import org.eclipse.rap.rwt.RWT; import org.eclipse.swt.SWT; @@ -48,6 +51,8 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; public class CmsLogin implements CmsStyles, CallbackHandler { + private final static Log log = LogFactory.getLog(CmsLogin.class); + private Composite parent; private Text usernameT, passwordT; private Composite credentialsBlock; @@ -205,7 +210,7 @@ public class CmsLogin implements CmsStyles, CallbackHandler { // save already entered values String usernameStr = usernameT.getText(); char[] pwd = passwordT.getTextChars(); - + for (Control child : parent.getChildren()) child.dispose(); createContents(parent); @@ -250,7 +255,7 @@ public class CmsLogin implements CmsStyles, CallbackHandler { return c; } - protected void login() { + protected boolean login() { Subject subject = cmsView.getSubject(); LoginContext loginContext; try { @@ -260,10 +265,21 @@ public class CmsLogin implements CmsStyles, CallbackHandler { new LoginContext(LOGIN_CONTEXT_ANONYMOUS, subject).logout(); loginContext = new LoginContext(LOGIN_CONTEXT_USER, subject, this); loginContext.login(); - } catch (LoginException e1) { - throw new CmsException("Cannot authenticate", e1); + } catch (FailedLoginException e) { + log.warn(e.getMessage()); + try { + Thread.sleep(3000); + } catch (InterruptedException e2) { + // silent + } + ErrorFeedback.show("Login failed", e); + return false; + } catch (LoginException e) { + log.error("Cannot login", e); + return false; } cmsView.authChange(loginContext); + return true; } protected void logout() {