集成用户表
假设你有自己的用户表,想利用BaskServer的默认登录机制,实现用户登录
BaskServer利用【SPI】实现用户服务类的扩展。
com.basksoft.core.database.service.user.UserService
接口内容:
import java.util.List;
import java.util.Map;
import com.basksoft.core.database.model.Group;
import com.basksoft.core.database.model.Page;
import com.basksoft.core.database.model.TenantUser;
import com.basksoft.core.database.model.User;
/**
* 用户服务类接口
*/
public interface UserService {
...
/**
* 用户密码验证
* @param account 用户账号
* @param password 密码
* @return 用户对象
*/
User validate(String account, String password);
}
其中validate方法在用户登录的时候调用,这个时候不仅要返回用户对象信息还需要返回用户的团队信息
该逻辑关系是存储在BaskServer的系统表中的,所以我们可以通过一个特殊的方法获取用户对应的团队列表:
List<Tenant> tenants = com.basksoft.core.database.manager.tenant.TenantManager.ins.newQuery.list(String account);
BaskServer中利用【SPI】提供扩展,你可以利用ServiceLoader定义一个UserService的扩展类并配置到系统中。 具体办法:
在项目的resources/META-INF/services下的com.basksoft.core.database.service.user.UserService文件中添加一个扩展类。例如: test.MyUserService
MyUserService的参考实现:
package test;
public class MyUserService extends UserServiceImpl {
@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<Tenant> tenants = com.basksoft.core.database.manager.tenant.TenantManager.ins.newQuery.list(String account);
user.setTenants(tenants);
} catch (Exception e) {
throw new BaskException(e);
}
return user;
}
}