This is an automated email from the ASF dual-hosted git repository. kwin pushed a commit to branch feature/OAK-11498-expose-bound-principals-via-jrsession in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
commit ae3e61b912eda17ee32d993ddf38b4e4cb8df606 Author: Konrad Windszus <[email protected]> AuthorDate: Tue Feb 18 16:34:55 2025 +0100 OAK-11498: Expose Session-bound principals via JackrabbitSession --- .../apache/jackrabbit/api/JackrabbitSession.java | 18 ++++++++++++---- .../jackrabbit/oak/jcr/session/SessionImpl.java | 7 +++++++ .../oak/jcr/session/JackrabbitSessionTest.java | 24 ++++++++++++++++++++-- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitSession.java b/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitSession.java index 5ad47e6b3d..9abbe104ab 100644 --- a/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitSession.java +++ b/oak-jackrabbit-api/src/main/java/org/apache/jackrabbit/api/JackrabbitSession.java @@ -16,18 +16,20 @@ */ package org.apache.jackrabbit.api; -import org.apache.jackrabbit.api.security.user.UserManager; -import org.apache.jackrabbit.api.security.principal.PrincipalManager; +import java.security.Principal; +import java.util.Set; +import javax.jcr.AccessDeniedException; import javax.jcr.Item; import javax.jcr.ItemNotFoundException; import javax.jcr.Node; import javax.jcr.Property; -import javax.jcr.Session; -import javax.jcr.AccessDeniedException; import javax.jcr.RepositoryException; +import javax.jcr.Session; import javax.jcr.UnsupportedRepositoryOperationException; +import org.apache.jackrabbit.api.security.principal.PrincipalManager; +import org.apache.jackrabbit.api.security.user.UserManager; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.osgi.annotation.versioning.ProviderType; @@ -277,4 +279,12 @@ public interface JackrabbitSession extends Session { return null; } } + + /** + * Returns the set of principals associated with this session. + * @return the set of principals associated with this session. + * @throws RepositoryException in case principal information cannot be retrieved. + * @since 1.78 + */ + @NotNull Set<Principal> getPrincipals() throws RepositoryException; } diff --git a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java index cce9688439..f3e6760310 100644 --- a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java +++ b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/session/SessionImpl.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.security.AccessControlException; +import java.security.Principal; import java.util.Collections; import java.util.Set; import java.util.TreeSet; @@ -845,6 +846,12 @@ public class SessionImpl implements JackrabbitSession { return sessionContext.getUserManager(); } + @Override + @NotNull + public Set<Principal> getPrincipals() throws RepositoryException { + return sd.getAuthInfo().getPrincipals(); + } + @Override public String toString() { if (isLive()) { diff --git a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/JackrabbitSessionTest.java b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/JackrabbitSessionTest.java index 9e9eca4d60..5d147c27d9 100644 --- a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/JackrabbitSessionTest.java +++ b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/session/JackrabbitSessionTest.java @@ -30,6 +30,9 @@ import javax.jcr.RepositoryException; import static org.mockito.Mockito.mock; +import java.security.Principal; +import java.util.Set; + public class JackrabbitSessionTest extends AbstractJCRTest { private JackrabbitSession s; @@ -81,6 +84,23 @@ public class JackrabbitSessionTest extends AbstractJCRTest { // success } } - - + + public void testGetPrincipalsForAdminSession() throws RepositoryException { + Set<Principal> principals = s.getPrincipals(); + assertNotNull(principals); + assertTrue("Admin principal expected", principals.contains(s.getPrincipalManager().getPrincipal("admin"))); + assertTrue("Everyone principal expected", principals.contains(s.getPrincipalManager().getEveryone())); + } + + public void testGetPrincipalsForGuestSession() throws RepositoryException { + JackrabbitSession guest = (JackrabbitSession) getHelper().getRepository().login(new GuestCredentials()); + try { + Set<Principal> principals = guest.getPrincipals(); + assertNotNull(principals); + assertFalse("Admin principal not expected", principals.contains(s.getPrincipalManager().getPrincipal("admin"))); + assertTrue("Everyone principal expected", principals.contains(s.getPrincipalManager().getEveryone())); + }finally { + guest.logout(); + } + } } \ No newline at end of file
