我有一个特例,我必须使用编译'多租户 - 单-db-0.8.3'和编译“:shiro:1.2.1”对于下面的案例: -
将组域作为租户,以便用户(用于身份验证的Shiro用户)在其组/租户中必须是唯一的。即,用户可能在其租户之外复制。因此,用户说A组中的test@gmail.com也可能在另一个B组中,因此可能在C中等等。
以下是我拥有的用户和群组域名: -
@MultiTenant
class User {
String username
String password
Group group
}
class Group implements Tenant {
String name
static belongsTo = [parent: Group]
static hasMany = [users: User]
}
class RestRealm {
def restService
static authTokenClass = ru.grails.security.RestToken
def authenticate(authToken) {
log.info "Attempting to authenticate ${authToken.token} in REST realm..."
def token = authToken.token
// If we don't have user for specified token then user is not authenticated
def username = restService.getUsernameForToken(token)
**def user = User.findByEmail(username)**
if (!user) {
throw new UnknownAccountException("No account found for token [${token}]")
}
if (user?.status == PartyStatus.INACTIVE) {
throw new InactiveUserException();
}
log.info "Found user '${user.email}' in DB"
return new SimpleAccount(user.email, user.password, "RestRealm")
}
}
多租户插件在域内不起作用(请参阅**中的代码。此用户必须仅从当前租户获取,该租户已使用实现TenantResolver的DomainTenantResolver设置)以及我创建的用于处理Shiro的restservice登录。我发现一个明显的解决方案是覆盖Shiro插件的功能来处理多租户。
是否有很多搜索是否有其他插件或Jar over maven来解决这个案例,但是徒劳无功。 但我很疑惑是否有其他人已经实施过这个问题的解决方案。
非常感谢任何帮助。