3.4.1.登錄集成

本文(wén)說明如何在自己的業務(wù)系統中(zhōng)引入URule Console Pro的功能(néng)。

假設你當前項目已經有(yǒu)用(yòng)戶登錄模塊和頁(yè)面框架,下文(wén)這種描述登錄邏輯的處理(lǐ)

實現SecurityProvider

首先需要實現com.bstek.urule.console.security.provider.SecurityProvider接口的實現類:

public interface SecurityProvider {
    String BEAN_ID="urule.securityProvider";
    /**
     * 獲取登錄用(yòng)戶對象,同時需要初始化用(yòng)戶的团隊信息
     * @param req HttpServletRequest
     * @return 返回用(yòng)戶對象
     */
    User getLoginUser(HttpServletRequest req);
    /**
     * 執行登錄操作(zuò)
     * @param req HttpServletRequest
     * @param account 賬号
     * @param password 密碼
     */
    void login(HttpServletRequest req, String account,String password);
    /**
     * 執行登出操作(zuò)
     * @param req HttpServletRequest
     */
    void logout(HttpServletRequest req);
}

在該實現類中(zhōng)實現内部的三個方法。并定義bean id為(wèi)"urule.securityProvider"覆蓋默認的URule Console Pro的默認登錄邏輯。

确保這個urule.securityProvider注冊到Spring中(zhōng)

參考實現:

@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");

    }

}

通過以上的方法解決URule Console Pro的用(yòng)戶登錄登出和用(yòng)戶信息獲取的邏輯。

其中(zhōng)getLoginUser方法需要返回com.bstek.urule.console.security.entity.User對象,定義如下:

public interface User {
    /**
     * 獲取用(yòng)戶賬号
     * @return 用(yòng)戶賬号 
     */
    String getName();
    /**
     * 獲取用(yòng)戶描述
     * @return 用(yòng)戶描述
     */
    String getDesc();

    /**
     * 獲取用(yòng)戶所屬团隊列表
     * @return
     */
    List<Group> getGroups();
}

這個對象有(yǒu)一個getGroups方法,這個方法是用(yòng)來獲取用(yòng)戶所屬的团隊列表。該邏輯關系是存儲在URule Console Pro的系統表中(zhōng)的,所以我們可(kě)以通過一個特殊的方法獲取用(yòng)戶對應的团隊列表:

List<Group> groups = com.bstek.urule.console.database.manager.group.GroupManager.ins.createQuery().list(user.getId());

要确保getLoginUser返回的用(yòng)戶對象中(zhōng)有(yǒu)group信息,否則這個用(yòng)戶無法訪問URule Console Pro中(zhōng)的任何資源。

用(yòng)戶登錄

在登錄頁(yè)面對應的登錄邏輯的處理(lǐ)代碼中(zhōng)調用(yòng)如下代碼,完成URule Console Pro的用(yòng)戶登錄:

com.bstek.urule.console.security.SecurityUtils.getSecurityProvider().login(request, account, password);

頁(yè)面集成

訪問团隊管理(lǐ)頁(yè)面,需要傳遞groupId參數,參考URL:

http://localhost:8081/urule/group?groupId=bstekteam

訪問項目管理(lǐ)頁(yè)面需要傳遞groupId和projectId參數,參考URL:

http://localhost:8081/urule/project?groupId=bstekteam&projectId=1

訪問項目規則編輯器頁(yè)面需要傳遞groupId和projectId參數,參考URL:

http://localhost:8081/urule/studio?groupId=bstekteam&projectId=1

results matching ""

    No results matching ""