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;
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;
private Map<String, Object> views = new HashMap<>();
+ private List<Consumer<CmsSession>> onCloseCallbacks = Collections.synchronizedList(new ArrayList<>());
+
public CmsSessionImpl(Subject initialSubject, Authorization authorization, Locale locale, String localSessionId) {
this.creationTime = ZonedDateTime.now();
this.locale = locale;
end = ZonedDateTime.now();
serviceRegistration.unregister();
+ for (Consumer<CmsSession> onClose : onCloseCallbacks) {
+ onClose.accept(this);
+ }
+
try {
LoginContext lc;
if (isAnonymous()) {
log.debug("Closed " + this);
}
+ @Override
+ public void addOnCloseCallback(Consumer<CmsSession> onClose) {
+ onCloseCallbacks.add(onClose);
+ }
+
public Subject getSubject() {
return Subject.getSubject(accessControlContext);
}