3.4.1.登录集成

本文说明如何在自己的业务系统中引入URule Console Pro的功能。

假设你当前项目已经有用户登录模块和页面框架,下文这种描述登录逻辑的处理

实现SecurityProvider

首先需要实现com.bstek.urule.console.security.provider.SecurityProvider接口的实现类:

public interface SecurityProvider {
    String BEAN_ID="urule.securityProvider";
    /**
     * 获取登录用户对象,同时需要初始化用户的团队信息
     * @param req HttpServletRequest
     * @return 返回用户对象
     */
    User getLoginUser(HttpServletRequest req);
    /**
     * 执行登录操作
     * @param req HttpServletRequest
     * @param account 账号
     * @param password 密码
     */
    void login(HttpServletRequest req, String account,String password);
    /**
     * 执行登出操作
     * @param req HttpServletRequest
     */
    void logout(HttpServletRequest req);
}

在该实现类中实现内部的三个方法。并定义bean id为"urule.securityProvider"覆盖默认的URule Console Pro的默认登录逻辑。

确保这个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");

    }

}

通过以上的方法解决URule Console Pro的用户登录登出和用户信息获取的逻辑。

其中getLoginUser方法需要返回com.bstek.urule.console.security.entity.User对象,定义如下:

public interface User {
    /**
     * 获取用户账号
     * @return 用户账号 
     */
    String getName();
    /**
     * 获取用户描述
     * @return 用户描述
     */
    String getDesc();

    /**
     * 获取用户所属团队列表
     * @return
     */
    List<Group> getGroups();
}

这个对象有一个getGroups方法,这个方法是用来获取用户所属的团队列表。该逻辑关系是存储在URule Console Pro的系统表中的,所以我们可以通过一个特殊的方法获取用户对应的团队列表:

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

要确保getLoginUser返回的用户对象中有group信息,否则这个用户无法访问URule Console Pro中的任何资源。

用户登录

在登录页面对应的登录逻辑的处理代码中调用如下代码,完成URule Console Pro的用户登录:

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

页面集成

访问团队管理页面,需要传递groupId参数,参考URL:

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

访问项目管理页面需要传递groupId和projectId参数,参考URL:

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

访问项目规则编辑器页面需要传递groupId和projectId参数,参考URL:

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

results matching ""

    No results matching ""