2016-02-18 81 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服務器通信。這件事情更加複雜,需要幾個解決方法。正如我之前所說,我將無法提供完整的解決方案和更詳細的示例,但請隨時向我提出任何涉及此案例的內容。