jBPM 自定义授权
本文关键字:授权 自定义 jBPM | 更新日期: 2023-09-27 18:35:13
我正在尝试从现有的ASP .NET MVC网站使用jBPM用户。
正如我从文档和这个论坛主题(第一、第二)中了解到的那样,最好的解决方案是实现将调用外部服务的UserGroupInfoProducer
。但是由于缺乏Java经验,我遇到了几个问题。
第一种方法:创建具有所需实现的项目,部署它并配置 jBMP 以使用它。
问题出在另一个项目中声明的实现接口中,我尝试添加 maven 依赖项,但在某些类失败后,我只是添加了对所需 jar 的引用。
像战争失败一样在jboss上部署它,像jar成功一样部署,但服务器找不到UserGroupInfoProducer
和其他实现的接口。
更改jbmp-console
配置的另一个问题。我为此找到的唯一方法是直接修改存档,但我不认为这是正确的解决方案。
第二种方法:使用所需的类创建自己的jBPM包。这里的问题是我不知道什么存储库用于此以及如何为我的服务器构建版本。正如我从此链接中了解到的那样,我需要使用 jbmp-console-ng,我发现的唯一用于创建战争包的 maven 任务是在我尝试运行它(版本 6.2.0 Final)jbpm-console-ng-showcase
在Windows上:由于关于长路径的maven错误而无法执行,在将项目迁移到gradle并排除对jmxtools-1.2.1.jar和jmxri-1.2.1的依赖后.jar它造成了战争,但jboss无法启动服务。
在Mac和Ubuntu上使用虚拟盒子:它需要将java降级到1.6并在此之后构建war,但由于某些类的重复,它未能部署。
据我了解,您需要为每个版本的服务器进行不同的构建,但我不知道该怎么做。
第三种方法:创建支持的授权方式的模拟。据我了解,jBMP支持LDAP,JAAS,数据库和文件。数据库和文件将需要重复的用户,所以我研究了模拟LDAP或JAAS(最好使用C#),但没有找到任何可接受的方法。
我将非常感谢任何建议这种方法可能有效或其他一些建议。特别是关于建立jbmp-console
战争.
使用的版本: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、服务器和仪表板构建器)提供完全自定义的授权模块。这并不容易,需要一些魔法 - 覆盖两个类不会:)
我的需求非常复杂,最终解决方案包括kie-wb,服务器,dashbuiler和外部身份验证,它们由REST Web服务响应用户提供基于会话中传递的令牌的角色。您必须记住的另一件事是kie-wb和服务器通过BASIC身份验证进行通信 - 如果您想使用服务器,还必须提供两种可能的身份验证方法。我将无法在这里发布任何代码,因为它不是一个开源项目,但我会尽力提供帮助。
如果你像上面所说的那样使用WildFly,你应该看看的是Undertow Servlet Extension
。覆盖句柄部署方法允许您编写自己的 IdentityManager(如果需要)并注册您的自定义身份验证机制。
要实现您自己的身份验证机制,您应该查看此项目 Custom Spnego Auth for WildFly
我的解决方案基于上述项目 - 您不必实现每个类 - 在我的情况下,编写我自己的实现身份验证机制的类足以让自定义身份验证在 kie-wb 中工作(虽然不适用于服务器)。
因此,如果您已经覆盖了 Servlet 扩展(并通过将包含自定义 servlet 扩展类名的文件 io.undertow.servlet.ServletExtension 放入/WEB-INF/classes/META-INF/services/.war 文件的路径)并实现自定义身份验证机制,接下来你应该做的是编写实现 org.jboss.security.auth.spi.LoginModule 接口的类。如果你不想自己实现这个接口,你可以从WildFly扩展一个已经实现的类 - 例如UsernamePasswordLoginModule或其他。
为了让 WildFly 知道我们正在使用非标准登录模块,我们必须修改独立完整.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 Extension 类的类中注册的身份验证机制的名称。
上述说明不包括 kie-wb <-> kie 服务器通信。这个问题比较复杂,需要一些解决方法。正如我之前所说,我将无法通过更详细的例子提供完整的解决方案,但请随时向我询问有关此案例的任何事情。