X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fauth%2FCmsSessionImpl.java;h=aa3a6ad17dd3e61fa4bd4dc751c6533a2a1f8b4a;hb=600afe220ae3bad9b2904f7a6d5529168e5c0f1b;hp=b0824e84bb1924835d0232c1691a7609d8de1807;hpb=ae3786244404433f609a71669eaf878a825717b9;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 b0824e84b..aa3a6ad17 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 @@ -5,13 +5,17 @@ import java.security.AccessControlContext; import java.security.AccessController; import java.security.PrivilegedAction; import java.time.ZonedDateTime; +import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.Hashtable; +import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.UUID; +import java.util.function.Consumer; import javax.crypto.SecretKey; import javax.naming.InvalidNameException; @@ -21,10 +25,10 @@ import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; import javax.security.auth.x500.X500Principal; -import org.argeo.api.cms.CmsSession; +import org.argeo.api.cms.CmsAuth; import org.argeo.api.cms.CmsLog; +import org.argeo.api.cms.CmsSession; import org.argeo.cms.security.NodeSecurityUtils; -import org.argeo.api.cms.CmsAuth; import org.osgi.framework.BundleContext; import org.osgi.framework.FrameworkUtil; import org.osgi.framework.InvalidSyntaxException; @@ -54,6 +58,8 @@ public class CmsSessionImpl implements CmsSession, Serializable { private Map views = new HashMap<>(); + private List> onCloseCallbacks = Collections.synchronizedList(new ArrayList<>()); + public CmsSessionImpl(Subject initialSubject, Authorization authorization, Locale locale, String localSessionId) { this.creationTime = ZonedDateTime.now(); this.locale = locale; @@ -92,6 +98,10 @@ public class CmsSessionImpl implements CmsSession, Serializable { end = ZonedDateTime.now(); serviceRegistration.unregister(); + for (Consumer onClose : onCloseCallbacks) { + onClose.accept(this); + } + try { LoginContext lc; if (isAnonymous()) { @@ -108,6 +118,11 @@ public class CmsSessionImpl implements CmsSession, Serializable { log.debug("Closed " + this); } + @Override + public void addOnCloseCallback(Consumer onClose) { + onCloseCallbacks.add(onClose); + } + public Subject getSubject() { return Subject.getSubject(accessControlContext); }