X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms.ui%2Fsrc%2Forg%2Fargeo%2Fcms%2Futil%2FLoginEntryPoint.java;h=b7bf9103ab7ce2f0bd9398a596e2012cbba4d936;hb=92b77a90db637e71a7ccbc76fc12bad6ba4a289a;hp=a8b52a5c29c91f861b727f7a775df1f1f5121e49;hpb=34ba1b915e1d406f6574c0be93e1e9da3eab1978;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms.ui/src/org/argeo/cms/util/LoginEntryPoint.java b/org.argeo.cms.ui/src/org/argeo/cms/util/LoginEntryPoint.java index a8b52a5c2..b7bf9103a 100644 --- a/org.argeo.cms.ui/src/org/argeo/cms/util/LoginEntryPoint.java +++ b/org.argeo.cms.ui/src/org/argeo/cms/util/LoginEntryPoint.java @@ -2,10 +2,13 @@ package org.argeo.cms.util; import java.util.Locale; +import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; import javax.servlet.http.HttpServletRequest; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsException; import org.argeo.cms.auth.CurrentUser; import org.argeo.cms.ui.CmsImageManager; @@ -15,7 +18,6 @@ import org.argeo.cms.widgets.auth.CmsLogin; import org.argeo.cms.widgets.auth.CmsLoginShell; import org.argeo.eclipse.ui.specific.UiContext; import org.argeo.node.NodeConstants; -import org.argeo.node.security.NodeAuthenticated; import org.eclipse.rap.rwt.RWT; import org.eclipse.rap.rwt.application.EntryPoint; import org.eclipse.swt.events.SelectionListener; @@ -25,15 +27,14 @@ import org.eclipse.swt.widgets.Display; public class LoginEntryPoint implements EntryPoint, CmsView { protected final static String HEADER_WWW_AUTHENTICATE = "WWW-Authenticate"; protected final static String HEADER_AUTHORIZATION = "Authorization"; - // private final static Log log = LogFactory.getLog(WorkbenchLogin.class); - // private final Subject subject = new Subject(); + private final static Log log = LogFactory.getLog(LoginEntryPoint.class); private LoginContext loginContext; private UxContext uxContext = null; @Override public int createUI() { final Display display = createDisplay(); - UiContext.setData(NodeAuthenticated.KEY, this); + UiContext.setData(CmsView.KEY, this); CmsLoginShell loginShell = createCmsLoginShell(); try { // try pre-auth @@ -43,19 +44,21 @@ public class LoginEntryPoint implements EntryPoint, CmsView { loginShell.createUi(); loginShell.open(); -// HttpServletRequest request = RWT.getRequest(); -// String authorization = request.getHeader(HEADER_AUTHORIZATION); -// if (authorization == null || !authorization.startsWith("Negotiate")) { -// HttpServletResponse response = RWT.getResponse(); -// response.setStatus(401); -// response.setHeader(HEADER_WWW_AUTHENTICATE, "Negotiate"); -// response.setDateHeader("Date", System.currentTimeMillis()); -// response.setDateHeader("Expires", System.currentTimeMillis() + (24 * 60 * 60 * 1000)); -// response.setHeader("Accept-Ranges", "bytes"); -// response.setHeader("Connection", "Keep-Alive"); -// response.setHeader("Keep-Alive", "timeout=5, max=97"); -// // response.setContentType("text/html; charset=UTF-8"); -// } + // HttpServletRequest request = RWT.getRequest(); + // String authorization = request.getHeader(HEADER_AUTHORIZATION); + // if (authorization == null || + // !authorization.startsWith("Negotiate")) { + // HttpServletResponse response = RWT.getResponse(); + // response.setStatus(401); + // response.setHeader(HEADER_WWW_AUTHENTICATE, "Negotiate"); + // response.setDateHeader("Date", System.currentTimeMillis()); + // response.setDateHeader("Expires", System.currentTimeMillis() + + // (24 * 60 * 60 * 1000)); + // response.setHeader("Accept-Ranges", "bytes"); + // response.setHeader("Connection", "Keep-Alive"); + // response.setHeader("Keep-Alive", "timeout=5, max=97"); + // // response.setContentType("text/html; charset=UTF-8"); + // } while (!loginShell.getShell().isDisposed()) { if (!display.readAndDispatch()) @@ -63,7 +66,7 @@ public class LoginEntryPoint implements EntryPoint, CmsView { } } - if (CurrentUser.getUsername() == null) + if (CurrentUser.getUsername(getSubject()) == null) return -1; uxContext = new SimpleUxContext(); return postLogin(); @@ -121,6 +124,15 @@ public class LoginEntryPoint implements EntryPoint, CmsView { @Override public void authChange(LoginContext loginContext) { + if (loginContext == null) + throw new CmsException("Login context cannot be null"); + // logout previous login context + if (this.loginContext != null) + try { + this.loginContext.logout(); + } catch (LoginException e1) { + log.warn("Could not log out: " + e1); + } this.loginContext = loginContext; } @@ -142,9 +154,18 @@ public class LoginEntryPoint implements EntryPoint, CmsView { } + // @Override + // public LoginContext getLoginContext() { + // return loginContext; + // } + + protected Subject getSubject() { + return loginContext.getSubject(); + } + @Override - public LoginContext getLoginContext() { - return loginContext; + public boolean isAnonymous() { + return CurrentUser.isAnonymous(getSubject()); } @Override