Java 从用户会话jackrabbit获取用户

Java 从用户会话jackrabbit获取用户,java,jackrabbit,jcr,Java,Jackrabbit,Jcr,我已经创建了一个不属于管理组的项目。想要从登录的用户会话中检索用户对象 使用管理员创建的用户: org.apache.jackrabbit.api.security.user.User applicationUser = accessController.createUser(user.getUsername(), user.getPassword()); Session session = repository.login( new SimpleCredentials(user

我已经创建了一个不属于管理组的项目。想要从登录的用户会话中检索用户对象

使用管理员创建的用户:

org.apache.jackrabbit.api.security.user.User applicationUser  =
  accessController.createUser(user.getUsername(), user.getPassword());
Session session = repository.login(
    new SimpleCredentials(userInstance.getUsername(),
    userInstance.getPassword().toCharArray()));
使用新创建的用户登录:

org.apache.jackrabbit.api.security.user.User applicationUser  =
  accessController.createUser(user.getUsername(), user.getPassword());
Session session = repository.login(
    new SimpleCredentials(userInstance.getUsername(),
    userInstance.getPassword().toCharArray()));
正在尝试检索用户对象:

UserManager userManager = ((JackrabbitSession)adminSession).getUserManager(); 
User repoUser = (User) userManager.getAuthorizable(userName);
但是
userManager
为空,因为从用户创建的会话不属于管理组

我找到的唯一方法是向管理员模拟用户会话并检索用户对象

但是,有没有其他方法可以在不进行模拟的情况下检索
用户
对象

使用Jackrabbit 2.6.0和JCR2.0


谢谢。

尝试通过替换simple.SimpleSecurityManager…来更改repository.xml,它可以:



userManager不应为空。如果有问题,它应该抛出一个异常。你的评论是无关的。我所寻找的是任何替代方案,而不是userManager创建问题。你错了,这完全相关。UserManager是获取用户的正确方法。很明显,您的代码中有一个问题,我们无法看到,因为您没有显示所有代码。我的问题是,为了检索UserManager,用户应该是管理员组或超级用户的一部分。但是一个用户想要将某个文件夹或文档共享给另一个用户(通过基于主体的acl共享),他应该冒充为管理员用户并相应地设置acl。我想避免模仿。听起来是个坏主意。如果用户应该能够授予对文件夹的权限,那么应该授予他们这样做的权限,而不是冒充管理员。