X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fauth%2FCmsSessionImpl.java;h=3a23870bd0703a37608311c694d70a80ee82f672;hb=b95462873703848193e56fcbe997693630db6121;hp=e78567b07df03ebcbfd44d286f5f8c424ea36615;hpb=4d675e1c871cfd8e4481e03cd496ab975b8b367d;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java b/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java index e78567b07..3a23870bd 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/auth/CmsSessionImpl.java @@ -1,9 +1,6 @@ package org.argeo.cms.internal.auth; import java.io.Serializable; -import java.security.AccessControlContext; -import java.security.AccessController; -import java.security.PrivilegedAction; import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Collections; @@ -12,11 +9,9 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; -import java.util.Set; import java.util.UUID; import java.util.function.Consumer; -import javax.crypto.SecretKey; import javax.security.auth.Subject; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; @@ -26,18 +21,16 @@ import org.argeo.api.cms.CmsAuth; import org.argeo.api.cms.CmsConstants; import org.argeo.api.cms.CmsLog; import org.argeo.api.cms.CmsSession; +import org.argeo.api.uuid.UuidIdentified; import org.argeo.cms.internal.runtime.CmsContextImpl; -import org.osgi.framework.ServiceRegistration; import org.osgi.service.useradmin.Authorization; /** Default CMS session implementation. */ -public class CmsSessionImpl implements CmsSession, Serializable { +public class CmsSessionImpl implements CmsSession, Serializable, UuidIdentified { private static final long serialVersionUID = 1867719354246307225L; -// private final static BundleContext bc = FrameworkUtil.getBundle(CmsSessionImpl.class).getBundleContext(); private final static CmsLog log = CmsLog.getLog(CmsSessionImpl.class); - // private final Subject initialSubject; - private transient AccessControlContext accessControlContext; + private transient Subject subject; private final UUID uuid; private final String localSessionId; private Authorization authorization; @@ -49,8 +42,6 @@ public class CmsSessionImpl implements CmsSession, Serializable { private ZonedDateTime end; private final Locale locale; - private ServiceRegistration serviceRegistration; - private Map views = new HashMap<>(); private List> onCloseCallbacks = Collections.synchronizedList(new ArrayList<>()); @@ -61,15 +52,7 @@ public class CmsSessionImpl implements CmsSession, Serializable { this.creationTime = ZonedDateTime.now(); this.locale = locale; - this.accessControlContext = Subject.doAs(initialSubject, new PrivilegedAction() { - - @Override - public AccessControlContext run() { - return AccessController.getContext(); - } - - }); - // this.initialSubject = initialSubject; + this.subject = initialSubject; this.localSessionId = localSessionId; this.authorization = authorization; if (authorization.getName() != null) { @@ -94,15 +77,15 @@ public class CmsSessionImpl implements CmsSession, Serializable { try { LoginContext lc; if (isAnonymous()) { - lc = new LoginContext(CmsAuth.LOGIN_CONTEXT_ANONYMOUS, getSubject()); + lc = CmsAuth.ANONYMOUS.newLoginContext(getSubject()); } else { - lc = new LoginContext(CmsAuth.LOGIN_CONTEXT_USER, getSubject()); + lc = CmsAuth.USER.newLoginContext(getSubject()); } lc.logout(); } catch (LoginException e) { log.warn("Could not logout " + getSubject() + ": " + e); } finally { - accessControlContext = null; + subject = null; } log.debug("Closed " + this); } @@ -113,7 +96,7 @@ public class CmsSessionImpl implements CmsSession, Serializable { } public Subject getSubject() { - return Subject.getSubject(accessControlContext); + return subject; } // public Set getSecretKeys() { @@ -146,7 +129,7 @@ public class CmsSessionImpl implements CmsSession, Serializable { } @Override - public UUID getUuid() { + public UUID uuid() { return uuid; } @@ -193,6 +176,21 @@ public class CmsSessionImpl implements CmsSession, Serializable { views.put(uid, view); } + /* + * OBJECT METHODS + */ + + @Override + public boolean equals(Object o) { + return UuidIdentified.equals(this, o); + } + + @Override + public int hashCode() { + return UuidIdentified.hashCode(this); + } + + @Override public String toString() { return "CMS Session " + userDn + " localId=" + localSessionId + ", uuid=" + uuid; }