导入系统用户

BaskReport支持接口的方式导入系统用户,选择该类型后系统不支持用户注册,改名,邮箱调整,密码调整等操作。

用户对象的结构:

package com.basksoft.report.console.security.entity;

public interface User {
    /**
     * 用户账号
     */
    private String account;
    /**
     * 用户名
     */
    private String username;
    /**
     * 用户密码
     */
    private String password;
    /**
     * 用户邮箱
     */
    private String email;
    /**
     * 是否启用
     */
    private boolean enable;
    /**
     * 备注
     */
    private String desc;
    /**
     * 是否管理员
     */
    private boolean admin;

    /**
     * 用户角色
     */
    private List<Role> roles;

    ...

}

对应用户的服务类,系统用户信息就来源于该服务类提供的用户对象。

com.basksoft.report.core.database.serivce.user.UserService

接口内容:

public interface UserService {

    /**
     * 获取分页用户数据
     * @param page
     * @param parameters 查询条件
     */
    void getUsers(Page<User> page, Map<String, Object> parameters);

    /**
     * 获取用户对象,包含角色信息
     * @param account 用户账号
     * @return
     */
    User get(String account);

    /**
     * 用户密码验证
     * @param account 用户账号
     * @param password 密码
     * @return 用户对象
     */
    User validate(String account, String password);

}

其中validate方法在用户登录的时候调用,这个时候不仅要返回用户对象信息还需要返回用户的角色信息

BaskReport中提供了ServiceLoader的扩展机制,你可以利用ServiceLoader定义一个UserService的扩展类并配置到系统中。

参考实现:

public class UserServiceImpl implements UserService {
    private static final String ACCOUNT_KEY = "account";
    private static final String USERNAME_KEY = "username";
    private static final String DESC_KEY = "desc";

    @Override
    public void getUsers(Page<User> page, Map<String, Object> parameters) {
        UserQuery query = UserManager.ins.newQuery();
        if (parameters.containsKey(ACCOUNT_KEY));{
            String value = parameters.get(ACCOUNT_KEY).toString();
            if (StringUtils.isNotBlank(value)) {
                query.idLike(value);
            }
        }
        if (parameters.containsKey(USERNAME_KEY));{
            String value = parameters.get(USERNAME_KEY).toString();
            if (StringUtils.isNotBlank(value)) {
                query.nameLike(value);
            }
        }
        if (parameters.containsKey(DESC_KEY));{
            String value = parameters.get(DESC_KEY).toString();
            if (StringUtils.isNotBlank(value)) {
                query.descLike(value);
            }
        }
        Page<User> users = query.paging(page.getPageNumber(),  page.getPageSize());
        page.setData(users.getData());
        page.setTotalRows(users.getTotalRows());
    }

    @Override
    public User get(String account) {
        User user = UserManager.ins.get(account);
        user.setRoles(RoleManager.ins.getUserRoles(user.getAccount()));
        return user;
    }

    @Override
    public User validate(String account, String password) {
        User user = null;
        try {
            if (StringUtils.isEmpty(account) || StringUtils.isEmpty(password)) {
                throw new BaskException("账号和密码不能为空!<br>Username and Password can not be null.");
            }
            user = this.get(account);
            if (user==null) {
                throw new BaskException( "账号或密码错误!<br>Username or Password is invalid.");
            }
            else if (!password.equals(user.getPassword())) {
                throw new BaskException( "账号或密码错误!<br>Username or Password is invalid.");
            }

            List<Role> roles = RoleManager.ins.getUserRoles(account);
            user.setRoles(roles);
        } catch (Exception e) {
            throw new BaskException(e);
        }
        return user;
    }
}

results matching ""

    No results matching ""