这个让我疯狂。
我在JBoss AS中有一个Guvnor(稍后会有更多版本)。我编辑了components.xml以启用身份验证(使用JAAS,我已经设置了用户和密码)和基于角色的权限。我有一个拥有完全权限的'admin'用户和一个具有只读权限的'agent'用户。到目前为止一切顺利,在Guvnor我可以看到用户和适当的权限,我可以使用'admin'用户登录浏览器上传规则等,我可以使用'agent'用户下载changeset.xmls和二进制文件。 / p>
现在,我从Java应用程序中设置了一个知识代理。在UrlResource中,我设置了用户名('agent')和密码。变更集下载得很好,但是,changeset.xml引用其他资源(例如PKG)。下载它们失败(HTTP 401)。看起来像Drools忘记了我的凭证。
手动编辑changeset.xml,并添加enableBasicAuthentcation,用户名和密码 - 它工作正常。但这真的不是要走的路。
我一直在寻找任何一种解决方案:a)在Guvnor中查看一些选项面板,以便我可以在部署包时自动设置嵌入在changeset.xml中的内容b)找到一种方法,因此凭据在我的Java项目所以一切正常。
现在,我尝试了Drools 5.1.1,5.2.FINAL,5.3.CR1,查看了这些版本的文档。我发现的唯一评论是在5.3文档中:“更改集中的用户ID和密码应该与components.xml中配置的Authenticator的要求一致。” - 谢谢,我明白了,但是怎么做? “有关详细信息,请参阅”管理指南“的”安全 - 身份验证和基本访问“部分。”我做了什么都没发现。
真的,我错过了什么,或者我做错了什么?真的解决这个问题的唯一方法是不使用身份验证吗?或者在每次更改时手动编辑changeset.xmls?
非常感谢任何帮助。
答案 0 :(得分:2)
我在使用KnowledgeAgent时已经遇到此错误,似乎Url资源设置不正确(我说的是5.1.1版本) 作为一种解决方法,您可以设置一个新的代理事件监听器,因此强制使用用户名/密码(这是我的例子中的内部类):
private static final class AuthKnowledgeAgentEventListener extends
DefaultKnowledgeAgentEventListener {
private final String username;
private final String password;
private AuthKnowledgeAgentEventListener(String username, String password) {
this.username = username;
this.password = password;
}
@Override
public void beforeChangeSetApplied(BeforeChangeSetAppliedEvent event) {
// Obliged to do this to get UrlResources done correctly...
ChangeSet changeSet = event.getChangeSet();
for (Resource res : changeSet.getResourcesAdded()) {
if (res instanceof UrlResource) {
setupUrlResource((UrlResource) res);
}
}
for (Resource res : changeSet.getResourcesModified()) {
if (res instanceof UrlResource) {
setupUrlResource((UrlResource) res);
}
}
// maybe this is needed for deleted resources, i didn't check
}
private void setupUrlResource(UrlResource resource) {
if (starter.droolsAuthenticationEnabled) {
resource.setBasicAuthentication("enabled");
resource.setUsername(username);
resource.setPassword(password);
}
}
}
然后将此事件侦听器设置为您的代理:
agent.addEventListener(new AuthKnowledgeAgentEventListener("myusername","mypassword"));
就是这样!
答案 1 :(得分:2)