From cba35caa1a083661c8e113f5295b2dbfc90a16cd Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Mon, 23 Nov 2015 10:16:37 +0000 Subject: [PATCH] Improve login feedback. git-svn-id: https://svn.argeo.org/commons/trunk@8587 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../src/org/argeo/cms/auth/NodeUserLoginModule.java | 3 ++- .../src/org/argeo/cms/auth/UserAdminLoginModule.java | 6 ++++-- org.argeo.cms/src/org/argeo/cms/widgets/auth/CmsLogin.java | 5 ++++- .../src/org/argeo/security/ui/rap/RapWorkbenchLogin.java | 6 ++++++ 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/org.argeo.cms/src/org/argeo/cms/auth/NodeUserLoginModule.java b/org.argeo.cms/src/org/argeo/cms/auth/NodeUserLoginModule.java index a2f5863cb..5dce3c61d 100644 --- a/org.argeo.cms/src/org/argeo/cms/auth/NodeUserLoginModule.java +++ b/org.argeo.cms/src/org/argeo/cms/auth/NodeUserLoginModule.java @@ -12,6 +12,7 @@ import javax.naming.InvalidNameException; import javax.naming.ldap.LdapName; import javax.security.auth.Subject; import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.login.FailedLoginException; import javax.security.auth.login.LoginException; import javax.security.auth.spi.LoginModule; import javax.security.auth.x500.X500Principal; @@ -61,7 +62,7 @@ public class NodeUserLoginModule implements LoginModule { Iterator auth = subject.getPrivateCredentials( Authorization.class).iterator(); if (!auth.hasNext()) - return false; + throw new FailedLoginException("No authorization available"); authorization = auth.next(); return true; } diff --git a/org.argeo.cms/src/org/argeo/cms/auth/UserAdminLoginModule.java b/org.argeo.cms/src/org/argeo/cms/auth/UserAdminLoginModule.java index db677f57e..ea2a6dedf 100644 --- a/org.argeo.cms/src/org/argeo/cms/auth/UserAdminLoginModule.java +++ b/org.argeo.cms/src/org/argeo/cms/auth/UserAdminLoginModule.java @@ -14,6 +14,7 @@ import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; import javax.security.auth.callback.UnsupportedCallbackException; import javax.security.auth.login.CredentialNotFoundException; +import javax.security.auth.login.FailedLoginException; import javax.security.auth.login.LoginException; import javax.security.auth.spi.LoginModule; import javax.servlet.http.HttpServletRequest; @@ -108,9 +109,10 @@ public class UserAdminLoginModule implements LoginModule, AuthConstants { User user = userAdmin.getUser(null, username); if (user == null) - return false; + throw new FailedLoginException("Invalid credentials"); if (!user.hasCredential(null, password)) - return false; + throw new FailedLoginException("Invalid credentials"); + // return false; authorization = userAdmin.getAuthorization(user); } } 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 298b3965b..1051bd723 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,6 +17,7 @@ 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; @@ -263,8 +264,10 @@ public class CmsLogin implements CmsStyles, CallbackHandler { new LoginContext(LOGIN_CONTEXT_ANONYMOUS, subject).logout(); loginContext = new LoginContext(LOGIN_CONTEXT_USER, subject, this); loginContext.login(); + } catch (FailedLoginException e) { + log.warn(e.getMessage()); + return false; } catch (LoginException e) { - // throw new CmsException("Cannot authenticate", e1); log.error("Cannot login", e); return false; } diff --git a/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/RapWorkbenchLogin.java b/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/RapWorkbenchLogin.java index 790e6175d..7bf487a88 100644 --- a/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/RapWorkbenchLogin.java +++ b/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/RapWorkbenchLogin.java @@ -4,6 +4,7 @@ import java.security.PrivilegedAction; import java.util.Locale; import javax.security.auth.Subject; +import javax.security.auth.x500.X500Principal; import org.argeo.cms.CmsMsg; import org.argeo.cms.auth.CurrentUser; @@ -44,6 +45,11 @@ public class RapWorkbenchLogin extends LoginEntryPoint { @Override protected int postLogin() { final Display display = Display.getCurrent(); + Subject subject = getSubject(); + if (subject.getPrincipals(X500Principal.class).isEmpty()) { + RWT.getClient().getService(JavaScriptExecutor.class) + .execute("location.reload()"); + } // // RUN THE WORKBENCH // -- 2.30.2