X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.security.ui.rap%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Frap%2FSecureEntryPoint.java;fp=org.argeo.security.ui.rap%2Fsrc%2Forg%2Fargeo%2Fsecurity%2Fui%2Frap%2FSecureEntryPoint.java;h=a42fc2a8fff90356bd47e81f6f4b42da1b9ab0e0;hb=739faf3400e7f2f1b2bf06bd1ccf9da042c78f5b;hp=5ff76a9ea6156e795c945f81df62f2aca7bcf869;hpb=e200217c5d660b10423bced8b2b386e194e00559;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/SecureEntryPoint.java b/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/SecureEntryPoint.java index 5ff76a9ea..a42fc2a8f 100644 --- a/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/SecureEntryPoint.java +++ b/org.argeo.security.ui.rap/src/org/argeo/security/ui/rap/SecureEntryPoint.java @@ -20,7 +20,7 @@ import java.security.AccessController; import java.security.PrivilegedAction; import javax.security.auth.Subject; -import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.login.CredentialNotFoundException; import javax.security.auth.login.FailedLoginException; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; @@ -32,6 +32,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.ArgeoException; import org.argeo.cms.auth.AuthConstants; +import org.argeo.cms.auth.ThreadDeathLoginException; import org.argeo.cms.widgets.auth.DefaultLoginDialog; import org.argeo.eclipse.ui.dialogs.ErrorFeedback; import org.eclipse.jface.dialogs.MessageDialog; @@ -86,8 +87,9 @@ public class SecureEntryPoint implements EntryPoint { subject = new Subject(); final LoginContext loginContext; + DefaultLoginDialog callbackHandler; try { - CallbackHandler callbackHandler = new DefaultLoginDialog( + callbackHandler = new DefaultLoginDialog( display.getActiveShell()); loginContext = new LoginContext( AuthConstants.LOGIN_CONTEXT_USER, subject, @@ -118,7 +120,13 @@ public class SecureEntryPoint implements EntryPoint { "Bad Credentials", e.getMessage()); // retry login continue tryLogin; + } catch (CredentialNotFoundException e) { + MessageDialog.openInformation(display.getActiveShell(), + "No Credentials", e.getMessage()); + // retry login + continue tryLogin; } catch (LoginException e) { + callbackHandler.getShell().dispose(); return processLoginDeath(display, e); } } @@ -166,7 +174,7 @@ public class SecureEntryPoint implements EntryPoint { return returnCode; } - private Integer processLoginDeath(Display display, LoginException e) { + private Integer processLoginDeath(Display display, Throwable e) { // check thread death ThreadDeath td = wasCausedByThreadDeath(e); if (td != null) { @@ -193,7 +201,8 @@ public class SecureEntryPoint implements EntryPoint { protected ThreadDeath wasCausedByThreadDeath(Throwable t) { if (t instanceof ThreadDeath) return (ThreadDeath) t; - + if (t instanceof ThreadDeathLoginException) + return ((ThreadDeathLoginException) t).getThreadDeath(); if (t.getCause() != null) return wasCausedByThreadDeath(t.getCause()); else