【发布时间】:2014-04-20 19:32:53
【问题描述】:
我正在使用自定义 JAAS 登录模块开发 Jackrabbit 的 JCA 实现。这个想法是通过登录模块集成 Apache Shiro 身份验证和授权,使用 RepositoryLoginContext 简单地从 Shiro 令牌中为回调函数提供用户名和密码。 (我只有少数用户,配置了一个shiro.ini文件。)
在我尝试连接到存储库之前,所有部分似乎都适合。一种尝试是
SimpleCredentials userJCACredentials = new SimpleCredentials(username,shriroUserCreds.getPassword().toString());
但我似乎无法找到让它快乐的构建路径 JAR。 Jackrabbit API 文档让我很困惑。如果我查找 SimpleCredentials,我会得到一个 Day Software 页面 (!) 但是如果我查找 CryptedSimpleCredentials,我会得到一个 Apache 页面。考虑到可能只有加密版本可以与资源适配器一起使用,我尝试更改为该版本,但遇到了同样的问题
connInfo = new JCAConnectionRequestInfo(cryptedCreds,workspaceName)
在第一个参数中只需要 SimpleCredentials。我一直在 API 中寻找死胡同,例如 JCAConnectionRequestInfo(Credentials creds, String workspace)。如果您单击凭据链接,则会超时。另一个 gem 是 JCAManagedConnectionFactory 的构造函数之一,其中包含有关 IBM Websphere (!!) 的文本。
我尝试编写自己的类(基于简单凭据)实现 Credentials 接口和错误
new JCAConnectionRequestInfo(cryptedCreds,workspaceName)
变成无法解析 javax.jcr.Credentials。对于 Jackrabbit 安装,javax.jcr 路径不存在(至少对于资源适配器版本)。
由于无法理解上述内容,我尝试了第二种方法。
repoParameters.put("homeDir",ARCHIVE_REPO_DIR);
repoParameters.put("configFile",ARCHIVE_REPO_CONFIG);
repoMan = JCARepositoryManager.getInstance();
repo = repoMan.createRepository(repoParameters);
最后一行,使用 Map 参数,由 Eclipse 自动完成提示,与显示 createRepository(string, string) 的文档冲突。在任何情况下,都会出现关于 javax.jcr.Repository 解析的错误。回到同样的事情。
我已经探索了库中的每条自下而上的路径以获取会话。这似乎是不可能的,最终因为不存在的定义而失败。
查看源代码,我已经组装了以下
JCAManagedConnectionFactory mcf = new JCAManagedConnectionFactory();
mcf.setConfigFile(...);
mcf.setHomeDir...);
try {
mcf.setLogWriter(lpw);
connectionFactory = mcf.createConnectionFactory();
} catch (ResourceException rex) {
logger.error("client session failed to create connection factory");
logger.error(rex);
} finally {
success = false;
}
if (success) {
repo = (RepositoryImpl) connectionFactory;
session = repo.login( needs Credentials Here );
}
登录调用需要凭据和工作区名称。如果登录将由 JAAS 处理,我希望找到一个没有参数的 login(),其中 JAAS 登录将接管。
【问题讨论】:
标签: jackrabbit