导入系统用户
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;
}
}