2016-02-18 38 views
3

我想从现有的ASP .NET MVC网站的jBPM用户使用。jBPM定制授权

当我从docs理解和这个论坛的主题(firstsecond)最好的解决办法来实现的UserGroupInfoProducer,将调用外部服务。但由于缺乏Java的经验,我面临着几个问题。

第一种方法:用需要的实现创建项目,部署它并配置jBMP使用它。

问题是在实现另一个项目中声明的接口,我试图添加Maven的依赖关系,但失败后,我刚刚添加了对所需jar的引用。

在jboss上部署它就像战争失败,像jar部署成功,但服务器没有找到UserGroupInfoProducer和其他实现的接口。

更改jbmp-console的配置时的另一个问题。我发现的唯一方法是直接修改存档,但我不认为这是正确的解决方案。

第二种方法:用所需的类创建自己的jBPM包。 问题在这里,我不知道这个库以及如何为我的服务器构建版本。 当我从这个link明白我需要使用jbmp-console-ng,仅用于创建war包,我发现在jbpm-console-ng-showcase maven任务我试着运行它(释放6.2.0决赛):

  • 在Windows:由于关于长路径的maven错误而无法执行,因此在将项目迁移到gradle并排除对jmxtools-1.2.1.jar和jmxri-1.2.1.jar的依赖关系后,它创建了war,但jboss未能启动服务。

  • 在使用虚拟机的Mac和Ubuntu上:它需要将java降级到1.6并在此之后构建了war,但未能部署某些类的重复应用。

据我所知,你需要为每个版本的服务器构建不同的,但我不知道如何做到这一点。

第三种方法:创建仿真支持的授权方式。据我了解,jBMP支持LDAP,JAAS,数据库和文件。数据库和文件将需要复制用户,所以我研究了模拟LDAP或JAAS(最好使用C#),但没有找到任何可接受的方式。

我将非常感谢任何意见,这种方法可能工作或一些其他的建议。特别是关于建立jbmp-console的战争。

版本中使用: jBPM的(6.2.0决赛),JBOSS(Wildfly 8.1.0决赛),爪哇(1.8.0.73),蚂蚁(1.9.6),摇篮(2.11),IntelliJ IDEA的( 15.0.3)。

回答

4

经过几个星期的尝试和错误的方法,我终于成功地在我们的应用程序中为JBPM套件(kid-wb,server和dashbuilder)提供了完全自定义的授权模块。这并不容易,需要一些魔力 - 覆盖两个班级不会这样做:)

我的要求很复杂,最终的解决方案包括由REST Web服务提供的kie-wb,服务器,dashbuiler和外部认证基于在会话中传递的令牌响应具有角色的用户。另一件你必须记住的事情是kie-wb和服务器通过BASIC认证进行通信 - 如果你想使用服务器,你还必须提供两种可能的认证方法。我将无法在这里发布任何代码,因为它不是一个开源项目,但我会尽力帮助我做到最好。

如果您正在使用WildFly因为你说之上,你应该看看什么在IS Undertow Servlet Extension

改写handleDeployment方法让你写你自己的IdentityManager(如果你需要一个)并注册您的自定义AuthenticationMechanism。

为了实现自己的AuthenticationMechanism你应该看看这个项目Custom Spnego Auth for WildFly

我的解决方案是基于上面提到的项目 - 你不必实行每堂课 - 在我的情况写我自己的类实现AuthenticationMechanism就足够了以获得自定义身份验证在kie-wb中工作(不适用于服务器)。

因此,如果您已经覆盖了Servlet扩展(并通过将包含您的自定义servlet扩展类名称的文件io.undertow.servlet.ServletExtension注册到.war的/ WEB-INF/classes/META-INF/services /路径中进行注册)文件)并实现自定义AuthenticationMechanism接下来,您应该做的事情是编写实现org.jboss.security.auth.spi.LoginModule接口的类。如果你不想自己实现这个接口,你可以扩展一个已经实现的类从WildFly - 例如UsernamePasswordLoginModule或其他。

为了让WildFly知道,我们使用的是非标准登录模块,我们有如下修改独立-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.xml/WEB-INF目录如下:

<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服务器通信。这件事情更加复杂,需要几个解决方法。正如我之前所说,我将无法提供完整的解决方案和更详细的示例,但请随时向我提出任何涉及此案例的内容。