集成用户表
假设你有自己的用户表,想利用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;
    }
}