Java Jackrabbit用户管理
我几乎找不到任何关于如何为多个用户设计和构建存储库的文档 我对Jackrabbit很陌生,我总是使用一个主用户凭据来构建一个只由一个主用户访问的存储库 现在,我需要一个由数千名用户共享的存储库,每个用户都使用自己的节点,而没有其他用户的权限 SimpleAccessManager非常简单:Java Jackrabbit用户管理,java,jackrabbit,user-management,jcr,Java,Jackrabbit,User Management,Jcr,我几乎找不到任何关于如何为多个用户设计和构建存储库的文档 我对Jackrabbit很陌生,我总是使用一个主用户凭据来构建一个只由一个主用户访问的存储库 现在,我需要一个由数千名用户共享的存储库,每个用户都使用自己的节点,而没有其他用户的权限 SimpleAccessManager非常简单: public boolean isGranted(ItemId id, int permissions) throws RepositoryException { checkInitialized()
public boolean isGranted(ItemId id, int permissions) throws RepositoryException {
checkInitialized();
if (system) {
// system has always all permissions
return true;
} else if (anonymous) {
// anonymous is always denied WRITE & REMOVE permissions
if ((permissions & WRITE) == WRITE
|| (permissions & REMOVE) == REMOVE) {
return false;
}
}
return true;
}
似乎无法使用SimpleLoginModule和SimpleAccessManager创建这样的多用户存储库。因为它只区分管理员和匿名用户,他们可以读取所有内容,但不能写入
因此必须使用DefaultAccessManager,并可能执行以下操作:
Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
UserManager um = ((JackrabbitSession) session).getUserManager();
User user = um.createUser("john", "doe");
/* And assign some ALC as follows... And then play with it like this, which really sucks without proper documentation, one has to reverse engineer everything, wtf */
AccessControlManager acm = session.getAccessControlManager();
AccessControlPolicyIterator it = acm.getApplicablePolicies(testRootNode.getPath());
while ( it.hasNext() ) {
AccessControlPolicy acp = it.nextAccessControlPolicy();
Privilege[] privileges = new Privilege[]{acm.privilegeFromName(Privilege.JCR_WRITE)};
((AccessControlList)acp).addAccessControlEntry(new PrincipalImpl(user.getUserID()), privileges);
acm.setPolicy(testRootNode.getPath(), acp);
}
存储库可以通过OpenCMIS访问,OpenCMIS从客户端提供用户凭据
编辑:这是我在文档中查找的内容 安全配置元素是 用于指定身份验证和 服务器的授权设置 存储库
有关更多信息,请参阅。我不确定所有必要的步骤是什么,但您可以看看Hippo CMS存储库,它基于Apache JackRabbit。它是一个开源的CMS和内容存储库,基于域和方面实现了自己的用户管理
您可以找到Hippo CMS安全部分的来源。如果您需要具有“数千用户”的存储库,最好使用JAAS登录模块,该模块基于某些外部系统(LDAP或数据库等)对用户进行身份验证,并提供角色。当您使用工作区名称和可选凭据登录到存储库时,将返回会话。从这里可以看到:会话只公开用户有权访问的节点
如果您需要应用不同的访问控制,显然默认的SimpleAccessManager对您来说是不够的,因此您可能需要实现自己的AccessManager。特别是这一部分“一旦用户通过身份验证,Jackrabbit将使用配置的AccessManager来控制允许用户访问和修改存储库内容的哪些部分。Jackrabbit中包含的默认SimpleAccessManager类实现了一种非常简单的授权机制,该机制向所有用户授予完全读取权限,并向除匿名用户之外的所有用户授予写入权限。“这不太能回答我的问题。事实上,我昨天读过这篇文章,它只是说LoginModule负责auth,AccessManager负责ACL……实际上,这是因为JackRabbit是Java内容存储库的一个实现,这是一个规范。JCR。。。JackRabbit…明白了吗?我几乎不认识JackRabbit,我将用JR作为初学者来实现它,而且这个项目主要是关于没有任何UI的文档/元数据CRUD,所以hippo不是一个好选择。但我一直在努力争取一些空闲时间和Hippo一起玩,特别是因为Hippo Portal,我已经在Liferay上开发了几年了,所以Hippo+JetSpeed 2对我来说非常好