3.4.1.登錄集成
本文說明(míng)如何在自己的業務系統中引入URule Console Pro的功能。
假設你(nǐ)當前項目已經有(yǒu)用戶登錄模塊和(hé)頁面框架,下文這種描述登錄邏輯的處理(lǐ)
實現SecurityProvider
首先需要實現com.bstek.urule.console.security.provider.SecurityProvider接口的實現類:
public interface SecurityProvider {
String BEAN_ID="urule.securityProvider";
/**
* 獲取登錄用戶對象,同時(shí)需要初始化用戶的團隊信息
* @param req HttpServletRequest
* @return 返回用戶對象
*/
User getLoginUser(HttpServletRequest req);
/**
* 執行(xíng)登錄操作(zuò)
* @param req HttpServletRequest
* @param account 賬号
* @param password 密碼
*/
void login(HttpServletRequest req, String account,String password);
/**
* 執行(xíng)登出操作(zuò)
* @param req HttpServletRequest
*/
void logout(HttpServletRequest req);
}
在該實現類中實現內(nèi)部的三個(gè)方法。并定義bean id為(wèi)"urule.securityProvider"覆蓋默認的URule Console Pro的默認登錄邏輯。
确保這個(gè)urule.securityProvider注冊到Spring中
參考實現:
@Service(SecurityProvider.BEAN_ID)
public class DefaultSecurityProvider implements SecurityProvider {
@Resource(name=UserService.BEAN_ID)
UserService userService;
@Override
public User getLoginUser(HttpServletRequest req) {
return (User)req.getSession().getAttribute("urule.user");
}
@Override
public void login(HttpServletRequest req, String account, String password) {
com.bstek.urule.console.database.model.User user = userService.validate(account, password);
User securityUser = new DefaultUser(user.getId(), user.getName(), user.getGroups());
req.getSession().setAttribute("urule.user", securityUser);
}
@Override
public void logout(HttpServletRequest req) {
req.getSession().removeAttribute("urule.user");
}
}
通(tōng)過以上(shàng)的方法解決URule Console Pro的用戶登錄登出和(hé)用戶信息獲取的邏輯。
其中getLoginUser方法需要返回com.bstek.urule.console.security.entity.User對象,定義如下:
public interface User {
/**
* 獲取用戶賬号
* @return 用戶賬号
*/
String getName();
/**
* 獲取用戶描述
* @return 用戶描述
*/
String getDesc();
/**
* 獲取用戶所屬團隊列表
* @return
*/
List<Group> getGroups();
}
這個(gè)對象有(yǒu)一個(gè)getGroups方法,這個(gè)方法是用來(lái)獲取用戶所屬的團隊列表。該邏輯關系是存儲在URule Console Pro的系統表中的,所以我們可(kě)以通(tōng)過一個(gè)特殊的方法獲取用戶對應的團隊列表:
List<Group> groups = com.bstek.urule.console.database.manager.group.GroupManager.ins.createQuery().list(user.getId());
要确保getLoginUser返回的用戶對象中有(yǒu)group信息,否則這個(gè)用戶無法訪問URule Console Pro中的任何資源。
用戶登錄
在登錄頁面對應的登錄邏輯的處理(lǐ)代碼中調用如下代碼,完成URule Console Pro的用戶登錄:
com.bstek.urule.console.security.SecurityUtils.getSecurityProvider().login(request, account, password);
頁面集成
訪問團隊管理(lǐ)頁面,需要傳遞groupId參數(shù),參考URL:
http://localhost:8081/urule/group?groupId=bstekteam
訪問項目管理(lǐ)頁面需要傳遞groupId和(hé)projectId參數(shù),參考URL:
http://localhost:8081/urule/project?groupId=bstekteam&projectId=1
訪問項目規則編輯器(qì)頁面需要傳遞groupId和(hé)projectId參數(shù),參考URL:
http://localhost:8081/urule/studio?groupId=bstekteam&projectId=1