Activiti 7 如何接入自己系統的身份管理

2022-09-14 16:30:32 字數 2787 閱讀 8768

@component

public

class

securityutil

securitycontextholder.setcontext(

new securitycontextimpl(new

authentication()

@override

public

object getcredentials()

@override

public

object getdetails()

@override

public

object getprincipal()

@override

public

boolean

isauthenticated()

@override

public

void setauthenticated(boolean isauthenticated) throws

illegalargumentexception

@override

public

string getname()

}));

org.activiti.engine.impl.identity.authentication.setauthenticateduserid(username

securitycontextholder.setcontext(new securitycontextimpl(new

authentication() ,,};

for(string user : usersgroupsandroles)

return inmemoryuserdetailsmanager

注入了 inmemoryuserdetailsmanager 這個使用者服務,新建了兩個使用者 system ,admin,具備相應的角色,請注意 role_activiti_admin 的使用者將無法訪問呼叫相關的api 。

根據以上兩點,我們就可以改造,並接入自己的身份系統。

userdetailsservice 將會注入我們自己的身份服務activitiuserdetailsmanager。其實現我們仿造inmemoryuserdetailsmanager 類即可,關鍵**是重寫 如下方法:

@override

public userdetails loaduserbyusername(string userid) throws

usernamenotfoundexception

其中

bizuserentity bizuser = userservice.getbizuserbyid(userid);
這個是自己業務中身份服務查詢方法,並且將此物件轉換為如下使用者

org.springframework.security.core.userdetails.user;
並且具備role_activiti_user 這個角色。

和demo一樣,注入userdetailsservice 即可。

@bean

public

userdetailsservice activitiuserdetailsservice()

此次的引數 userservice,groupmanager 就是自己業務系統的使用者/組管理服務,我這裡是通過構造器傳入進去的,你也可以通過其他方式實現注入。說白了就是activitiuserdetailsmanager 這個類呢對你自己的userservice 又作了一層簡單的包裝,這樣可以做到和工作流的使用者服務解耦。

等等,以上的案例只是說明了使用者查詢,但是使用者組呢?其實activiti 7 中,有預設的實現

org.activiti.core.common.spring.identity.activitiusergroupmanagerimpl
其中,有兩個最重要的方法:獲取使用者組,獲取使用者角色

public listgetusergroups(string username) ).map((a) ->).collect(collectors.tolist());

}public listgetuserroles(string username) ).map((a) ->).collect(collectors.tolist());

}

這裡其實也是通過userdetailsservice 這個使用者查詢來做的,並且 是通過字首匹配去查詢 role_ , group_ 的字串,到這裡也就不難理解demo中如下**了

,

因此,仿造activitiusergroupmanagerimpl 的實現,新建 activitigroupmanagerimpl 實現

org.activiti.api.runtime.shared.identity.usergroupmanager
重寫相關的方法即可。值得注意的一點是,需要加上@primary這個註解

因為 預設的 activitiusergroupmanagerimpl 也是自動交給spring初始化了,加上@primary 就是告訴spring 當有多個 實現類shi,用activitigroupmanagerimpl 這個類。

到此,就完全接入自己的身份系統了,包含使用者和使用者組的能力。對於 activiti7 以下的版本,實現會有很大的差異,但是官方文件給出了解決方案,參見如下:

Activiti7入門介紹

1.什麼是工作流?工作的乙個過程,事務發展的乙個業務過程 如 請假流程 員工申請 部門經理審批 總經理審批 人事存檔 傳統的方式採用硬編碼的方式實現 表中字段 工號,部門編號,姓名,請假天數,狀態 員工0 未提交 1 提交 部門經理 員工部門編號 部門經理的部門編號 2 駁回 3 通過 總經理 4 ...

activiti7 設定流程啟動者

問題 表act hi procinst的字段start user id 空,導致查詢我發起的流程沒有結果集 historyservice.createhistoricprocessinstancequery startedby string.valueof userid 返回空。通過翻原始碼 aut...

Activiti7 歷史任務例項查詢

historictaskinstancequery htiq historyservice.createhistorictaskinstancequery list htilists htiq.processinstanceid hpiid orderbyhistorictaskinstanceen...