我创建的不是管理员组的一部分。想要从登录用户会话中检索用户对象。
使用admin created 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()));
尝试检索用户对象:
UserManager userManager = ((JackrabbitSession)adminSession).getUserManager();
User repoUser = (User) userManager.getAuthorizable(userName);
但是userManager
为空,因为从用户创建的会话不属于 admin group 。
我找到的唯一方法是模拟用户会话以管理和检索用户对象。
但是有没有其他方法可以在没有模仿的情况下检索User
对象?
使用 Jackrabbit 2.6.0和 JCR 2.0。
感谢。
答案 0 :(得分:0)
尝试通过替换simple.SimpleSecurityManager来更改repository.xml,它可以工作:
<Security appName="Jackrabbit">
<SecurityManager class="org.apache.jackrabbit.core.DefaultSecurityManager" workspaceName="security">
<!--
workspace access:
class: FQN of class implementing the WorkspaceAccessManager interface
-->
<!-- <WorkspaceAccessManager class="..."/> -->
<!-- <param name="config" value="${rep.home}/security.xml"/> -->
</SecurityManager>
<AccessManager class="org.apache.jackrabbit.core.security.DefaultAccessManager">
<!-- <param name="config" value="${rep.home}/access.xml"/> -->
</AccessManager>
<LoginModule class="org.apache.jackrabbit.core.security.authentication.DefaultLoginModule">
<!--
anonymous user name ('anonymous' is the default value)
-->
<param name="anonymousId" value="anonymous"/>
<!--
administrator user id (default value if param is missing is 'admin')
-->
<param name="adminId" value="admin"/>
</LoginModule>
</Security>