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.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.api.NodeConstants;
-import org.argeo.api.security.NodeSecurityUtils;
-import org.argeo.cms.auth.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.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.framework.InvalidSyntaxException;
public class CmsSessionImpl implements CmsSession, Serializable {
private static final long serialVersionUID = 1867719354246307225L;
private final static BundleContext bc = FrameworkUtil.getBundle(CmsSessionImpl.class).getBundleContext();
- private final static Log log = LogFactory.getLog(CmsSessionImpl.class);
+ private final static CmsLog log = CmsLog.getLog(CmsSessionImpl.class);
// private final Subject initialSubject;
private transient AccessControlContext accessControlContext;
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()) {
- lc = new LoginContext(NodeConstants.LOGIN_CONTEXT_ANONYMOUS, getSubject());
+ lc = new LoginContext(CmsAuth.LOGIN_CONTEXT_ANONYMOUS, getSubject());
} else {
- lc = new LoginContext(NodeConstants.LOGIN_CONTEXT_USER, getSubject());
+ lc = new LoginContext(CmsAuth.LOGIN_CONTEXT_USER, getSubject());
}
lc.logout();
} catch (LoginException e) {
log.debug("Closed " + this);
}
+ @Override
+ public void addOnCloseCallback(Consumer<CmsSession> onClose) {
+ onCloseCallbacks.add(onClose);
+ }
+
public Subject getSubject() {
return Subject.getSubject(accessControlContext);
}
return getEnd() != null;
}
- @Override
public Authorization getAuthorization() {
checkValid();
return authorization;
}
+ @Override
+ public String getDisplayName() {
+ return authorization.toString();
+ }
+
@Override
public UUID getUuid() {
return uuid;