@componentpublic
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注入了 inmemoryuserdetailsmanager 這個使用者服務,新建了兩個使用者 system ,admin,具備相應的角色,請注意 role_activiti_admin 的使用者將無法訪問呼叫相關的api 。authentication() ,,};
for(string user : usersgroupsandroles)
return inmemoryuserdetailsmanager
根據以上兩點,我們就可以改造,並接入自己的身份系統。
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此次的引數 userservice,groupmanager 就是自己業務系統的使用者/組管理服務,我這裡是通過構造器傳入進去的,你也可以通過其他方式實現注入。說白了就是activitiuserdetailsmanager 這個類呢對你自己的userservice 又作了一層簡單的包裝,這樣可以做到和工作流的使用者服務解耦。public
userdetailsservice activitiuserdetailsservice()
等等,以上的案例只是說明了使用者查詢,但是使用者組呢?其實activiti 7 中,有預設的實現
org.activiti.core.common.spring.identity.activitiusergroupmanagerimpl其中,有兩個最重要的方法:獲取使用者組,獲取使用者角色
public listgetusergroups(string username) ).map((a) ->).collect(collectors.tolist());這裡其實也是通過userdetailsservice 這個使用者查詢來做的,並且 是通過字首匹配去查詢 role_ , group_ 的字串,到這裡也就不難理解demo中如下**了}public listgetuserroles(string username) ).map((a) ->).collect(collectors.tolist());
}
,因此,仿造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...