宅急送項目的第十天筆記!(攔截器和JBPM 工作流程 在項目中應用 )_宅急送項目

來源:互聯網
上載者:User
已經完成許可權管理功能 
1、 模組添加 、列表查詢
2、 功能點添加 、查詢
3、 角色添加 、為角色授予許可權
4、 為使用者授予角色 

---------------- 全面測試。將返回json異常修複 
將bos功能許可權資訊.sql 匯入到資料庫 
功能路徑,參考menu.json 、 Action中業務方法 

****  <constant name="struts.devMode" value="true" /> 發生異常時,返回特定頁面 狀態代碼200 ---- 上線後 設定false

====================================================================================
一、使用攔截器,對所有action進行許可權控制 
細粒度 許可權控制,添加後,需要全體功能重新測試 

Filter: 攔截所有url
Interceptor 攔截所有 action訪問
Spring AOP 攔截所有Service 

********** 攔截針對 Action訪問路徑(名稱)
1) 使用者未登陸情況下 : 開放登陸功能  login.jsp 、user_login.action(登陸)
2) 如果使用者已經登陸,沒有任何授權,開發 修改密碼 : page_common_index.action(首頁)、user_editpassword.action(修改密碼)
3)  所用功能 其它.action 無許可權不能訪問 
4)  超級管理員 admin 密碼 admin  ----- 開發所用功能 

先判斷 對方訪問是不是登陸  ---- 如果是 允許存取
再判斷 使用者是否登陸 ------ 如果沒有登陸 (去登陸)
然後判斷 使用者是不是管理員admin ----- 如果是允許存取 
再判斷 使用者訪問功能是不是 修改密碼或者首頁 ----- 如果是 允許存取 
最後判斷 訪問功能,是否與當前登陸使用者權限一致 ---- 如果不一致( 許可權不足) , 如果一致允許存取

   <interceptors>
<!-- 註冊攔截器 -->
<interceptor name="privilegeInterceptor" class="cn.itcast.bos.web.interceptor.PrivilegeInterceptor"></interceptor>

<!-- 自訂攔截器棧 -->
<interceptor-stack name="privilegeStack">
<!-- 引入預設棧 -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 引入許可權攔截 -->
<interceptor-ref name="privilegeInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!-- 所有Action 都使用自訂棧 -->
<default-interceptor-ref name="privilegeStack"/>
*** 如果Action自己引入攔截器,預設棧將失效 

如果在使用者登陸後,將使用者可以訪問路徑資訊,放入Session 
做法一: 在業務層添加一個方法 ,返回 List<String> findFunctionsByUser(User user); 查詢使用者可以訪問功能路徑 
做法二: 在Domain User中  List<String> functions , 在登陸查詢時,就將List封裝進去 ,一起儲存到Session 
// 如果查詢到了,將相關功能路徑 封裝到user中 functionPaths 
Role role = user.getRole();
if(role != null){
// 使用者已經有角色
for(Function function: role.getFunctions()){
user.getFunctionPaths().add(function.getPage());// 將功能路徑 儲存user的列表中
}
}

插入管理員 
insert into users(username,password) values('admin',md5('admin'));

====================================================================================
二、JBPM 工作流程 在項目中應用 
JBPM 學習 = 商務程序圖 +  API 

因為業務不同 流程一定不同 (jbpm 商務程序圖,和uml 活動圖表非常類似)

* 商務程序圖中有很多活動節點 start end state task decision fork/join  (最重要 任務節點)


API : ProcessEngine 、RepositoryService 、ExecutionService 、TaskService  

嵌入到項目中  : JBPM工作流程 流程 和 商務程序 結合到一起
* 操作商務程序時。操作業務表, 同時JBPM 工作流程表 

***** 不管流程如何複雜,工作流程都可以很好的管理 (隨時查看整個流程,查看當前操作 進行流程哪個環節上)

常見做法: 手動方式(圖形設計器) ---- xml流程定義檔案 ------ 發布到工作流程架構中 --- 通過業務模組啟動這個流程 

***** 定製工作流程 
管理系統,在系統中管理員可以添加開始節點、任務節點、結束節點 通過form進行輸入 ---- 產生工作流程 xml 

三、設計中轉jbpm流程。部署到項目中 
通過jbpm設計器 完成流程圖 四個task任務節點, 一個decision判斷節點 

為每個任務節點指定任務的負責人 (三種個人任務指定、三種組任務指定)
1、任務由一組人來完成,而不是個人任務 (使用組任務的設定)
2、如果確定負責人 candidate-users 屬性固定 ------- 實際開發中 負責人不確定 (動態指定負責人) Handler
*** 自訂一個Handler 指定組負責人 
*** 自訂一個Handler : RoleAssignmentHandler  , 同一個handler 為不同四個任務指定責任人 

3、Decision判斷也要指定handler : ArriveDecisionHandler
   * 根據變數isArrive 判斷是去 中轉 還是 去入庫 
   
在測試環境通過 

四、部署中轉jbpm流程 (管理流程) ----------- admin 
流程列表查詢 : 查看已經上傳所有流程 
上傳流程zip壓縮檔 : 上傳後,將流程deploy 
查看流程圖 
刪除流程定義 (在測試時可以用。當流程正式啟用後 )

processdefinition_list.jsp 列表
processdefinition_deploy.jsp  上傳發布
admin.json 添加菜單 指向流程列表 


查詢整個流程定義資訊 RepositoryService 提供createProcessDefinitionQuery()  
*** java.util.List<ProcessDefinition> list()   結果 List<ProcessDefinition> 

將admin.json菜單 直接執行查詢Action ,直接查詢顯示商務程序列表 

查看流程圖
String deploymentId = "90001"; // 發布id 
String resourceName = "test.png"; // 與商務程序名相同png 
InputStream in = processEngine.getRepositoryService()
.getResourceAsStream(deploymentId, resourceName);


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.