X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.ui%2Fsrc%2Forg%2Fargeo%2Fcms%2Fui%2FAbstractCmsEntryPoint.java;h=f310f31e2b907c3b6a8b939eb578a911a2291eab;hb=5f483b2ddb6cb736bae99da3b7563c99246b273d;hp=5072c628dce5b6aa32bfe625a245495a728c7147;hpb=fd8f2c91e47d38445ba9702b40559939162f666d;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsEntryPoint.java b/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsEntryPoint.java index 5072c628d..f310f31e2 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsEntryPoint.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/ui/AbstractCmsEntryPoint.java @@ -12,7 +12,6 @@ import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.nodetype.NodeType; import javax.security.auth.Subject; -import javax.security.auth.login.CredentialNotFoundException; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; import javax.servlet.http.HttpServletRequest; @@ -23,8 +22,8 @@ import org.argeo.cms.CmsException; import org.argeo.cms.auth.HttpRequestCallbackHandler; import org.argeo.eclipse.ui.specific.UiContext; import org.argeo.jcr.JcrUtils; -import org.argeo.node.NodeAuthenticated; import org.argeo.node.NodeConstants; +import org.argeo.node.security.NodeAuthenticated; import org.eclipse.rap.rwt.RWT; import org.eclipse.rap.rwt.application.AbstractEntryPoint; import org.eclipse.rap.rwt.client.WebClient; @@ -42,7 +41,7 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement private final Log log = LogFactory.getLog(AbstractCmsEntryPoint.class); - private final Subject subject; + // private final Subject subject; private LoginContext loginContext; private final Repository repository; @@ -68,22 +67,20 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement this.workspace = workspace; this.defaultPath = defaultPath; this.factoryProperties = new HashMap(factoryProperties); - subject = new Subject(); + // subject = new Subject(); // Initial login try { - loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, subject, + loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, new HttpRequestCallbackHandler(UiContext.getHttpRequest())); loginContext.login(); - } catch (CredentialNotFoundException e) { + } catch (LoginException e) { try { - loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_ANONYMOUS, subject); + loginContext = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER); loginContext.login(); } catch (LoginException e1) { - throw new CmsException("Cannot log as anonymous", e); + throw new CmsException("Cannot log in as anonymous", e1); } - } catch (LoginException e) { - throw new CmsException("Cannot initialize subject", e); } authChange(loginContext); @@ -112,7 +109,7 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement @Override protected final void createContents(final Composite parent) { UiContext.setData(NodeAuthenticated.KEY, this); - Subject.doAs(subject, new PrivilegedAction() { + Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { @Override public Void run() { try { @@ -137,7 +134,8 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement */ protected Node getDefaultNode(Session session) throws RepositoryException { if (!session.hasPermission(defaultPath, "read")) { - if (session.getUserID().equals(NodeConstants.ROLE_ANONYMOUS)) + String userId = session.getUserID(); + if (userId.equals(NodeConstants.ROLE_ANONYMOUS)) // TODO throw a special exception throw new CmsException("Login required"); else @@ -158,9 +156,14 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement browserNavigation.pushState(state, title); } + // @Override + // public synchronized Subject getSubject() { + // return subject; + // } + @Override - public synchronized Subject getSubject() { - return subject; + public LoginContext getLoginContext() { + return loginContext; } @Override @@ -169,11 +172,11 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement throw new CmsException("Login context should not be null"); try { loginContext.logout(); - LoginContext anonymousLc = new LoginContext(NodeConstants.LOGIN_CONTEXT_ANONYMOUS, subject); + LoginContext anonymousLc = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER); anonymousLc.login(); authChange(anonymousLc); } catch (LoginException e) { - throw new CmsException("Cannot logout", e); + log.error("Cannot logout", e); } } @@ -216,7 +219,7 @@ public abstract class AbstractCmsEntryPoint extends AbstractEntryPoint implement } protected synchronized void doRefresh() { - Subject.doAs(subject, new PrivilegedAction() { + Subject.doAs(loginContext.getSubject(), new PrivilegedAction() { @Override public Void run() { refresh();