我正在尝试在来自现有 ASP .NET MVC 网站的 jBPM 用户中使用。
正如我从 docs 和本论坛主题( first , second )中了解到的,最佳解决方案是实现将调用外部服务的 UserGroupInfoProducer
。但是由于缺乏Java经验,我遇到了几个问题。
第一种方法: 创建具有所需实现的项目,部署它并配置 jBMP 以使用它。
问题在于在另一个项目中声明的实现接口(interface),我尝试添加 maven 依赖项,但在使用某些类失败后,我刚刚添加了对所需 jar 的引用。
像war一样部署在jboss上失败,像jar一样部署成功但是服务器没有找到UserGroupInfoProducer
等实现的接口(interface)。
更改 jbmp-console
配置的另一个问题。我找到的唯一方法是直接修改存档,但我不认为这是正确的解决方案。
第二种方法: 使用所需的类创建自己的 jBPM 包。
这里的问题是我不知道为此使用什么存储库以及如何为我的服务器构建版本。
正如我从这个 link 了解到的,我需要使用 jbmp-console-ng ,只有我发现的用于创建 war 包的 maven 任务是在 jbpm-console-ng-showcase
中,我已经尝试在以下平台上运行它(版本 6.2.0 Final):
据我了解,您需要为每个版本的服务器进行不同的构建,但我不知道该怎么做。
第三种方式: 创建来模拟支持的授权方式。据我了解 jBMP 支持 LDAP、JAAS、数据库和文件。数据库和文件需要复制用户,所以我研究了模拟 LDAP 或 JAAS(最好使用 C#),但没有找到任何可接受的方法。
我将非常感谢您提供哪种方法可行的建议或其他一些建议。特别是关于构建
jbmp-console
的 war 。使用的版本:
jBPM(6.2.0 Final)、jBoss(Wildfly 8.1.0 Final)、Java(1.8.0.73)、Ant(1.9.6)、Gradle(2.11)、Intellij IDEA (15.0.3)。
最佳答案
经过几周的尝试和错误方法后,我终于设法在我们的应用程序中为 JBPM 套件(kid-wb、server 和 dashbuilder)提供了完全自定义的授权模块。这并不容易,需要一些魔法 - 覆盖两个类不会这样做:)
我的要求非常复杂,最终的解决方案包括 kie-wb、服务器、dashbuiler 和外部身份验证,它们由 REST Web 服务响应用户提供基于 session 中传递的 token 的角色。您必须记住的另一件事是 kie-wb 和服务器通过 BASIC 身份验证进行通信 - 如果您还想使用服务器,则必须提供两种可能的身份验证方法。我不能在这里发布任何代码,因为它不是一个开源项目,但我会尽我所能提供帮助。
如果你像上面所说的那样使用 WildFly,你应该看的是 Undertow Servlet Extension
覆盖 handleDeployment 方法允许您编写自己的 IdentityManager(如果需要)并注册您的自定义 AuthenticationMechanism。
要实现你自己的 AuthenticationMechanism 你应该看看这个项目 Custom Spnego Auth for WildFly
我的解决方案基于上面提到的项目——你不必实现每个类——在我的情况下,编写我自己的类实现 AuthenticationMechanism 足以让自定义身份验证在 kie-wb 中工作(但不适用于服务器)。
因此,如果您已经覆盖了 Servlet 扩展(并通过将包含自定义 servlet 扩展类名的文件 io.undertow.servlet.ServletExtension 注册到/WEB-INF/classes/META-INF/services/.war 文件的路径中)并实现自定义 AuthenticationMechanism 接下来你应该做的是编写实现 org.jboss.security.auth.spi.LoginModule 接口(interface)的类。如果你不想自己实现这个接口(interface),你可以从 WildFly 扩展已经实现的类之一 - 例如 UsernamePasswordLoginModule 或其他。
为了让 WildFly 知道我们使用的是非标准登录模块,我们必须修改 standalone-full.xml 如下:
<subsystem xmlns="urn:jboss:domain:security:1.2">
<security-domains>
<security-domain name="other" cache-type="default">
<authentication>
<login-module code="com.package.CustomAuth" flag="required">
</login-module>
</authentication>
</security-domain>
</security-domains>
</subsystem>
然后...我们几乎完成了:) 剩下要做的一件事是修改 .war 文件中的部署描述符。我们必须更改/WEB-INF 目录中的 web.xml 如下:
<login-config>
<auth-method>BASIC?silent=true,CUSTOM</auth-method>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login_failed.jsp</form-error-page>
</form-login-config>
</login-config>
CUSTOM 是在实现 Servlet 扩展类的类中注册的身份验证机制的名称。
以上说明不包括 kie-wb kie 服务器通信。这个问题更复杂,需要一些解决方法。正如我之前所说,我将无法提供包含更详细示例的完整解决方案,但请随时向我询问有关此案例的任何问题。
关于c# - jBPM自定义授权,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35493102/