从User session jackrabbit获取用户

时间:2014-09-19 07:20:48

标签: java jackrabbit jcr

我创建的不是管理员组的一部分。想要从登录用户会话中检索用户对象。

使用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。

感谢。

1 个答案:

答案 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>