import java.util.Locale;
import java.util.Set;
import java.util.UUID;
+import java.util.concurrent.Callable;
+import java.util.concurrent.CompletionException;
import javax.security.auth.Subject;
import javax.security.auth.x500.X500Principal;
return username == null || username.equalsIgnoreCase(CmsConstants.ROLE_ANONYMOUS);
}
- public CmsSession getCmsSession() {
+ public static CmsSession getCmsSession() {
Subject subject = currentSubject();
CmsSessionId cmsSessionId = subject.getPrivateCredentials(CmsSessionId.class).iterator().next();
- return CmsSessionImpl.getByUuid(cmsSessionId.getUuid());
+ return CmsContextImpl.getCmsContext().getCmsSessionByUuid(cmsSessionId.getUuid());
}
/*
nodeSessionId = subject.getPrivateCredentials(CmsSessionId.class).iterator().next().getUuid();
else
return false;
- CmsSessionImpl cmsSession = CmsSessionImpl.getByUuid(nodeSessionId.toString());
+ CmsSessionImpl cmsSession = CmsContextImpl.getCmsContext().getCmsSessionByUuid(nodeSessionId);
// FIXME logout all views
// TODO check why it is sometimes null
return true;
}
+ /*
+ * PREPARE EVOLUTION OF JAVA APIs INTRODUCED IN JDK 18
+ * The following static methods will be added to Subject
+ */
+ public Subject current() {
+ return currentSubject();
+ }
+
+ public static <T> T callAs(Subject subject, Callable<T> action) {
+ try {
+ return Subject.doAs(subject, new PrivilegedExceptionAction<T>() {
+
+ @Override
+ public T run() throws Exception {
+ return action.call();
+ }
+
+ });
+ } catch (PrivilegedActionException e) {
+ throw new CompletionException("Failed to execute action for " + subject, e.getCause());
+ }
+ }
+
private CurrentUser() {
}
}