【问题标题】:Grails 2.2.3 + Spring security core + Multi-tenant Single DB pluginGrails 2.2.3 + Spring 安全核心 + 多租户单数据库插件
【发布时间】:2013-11-24 00:51:16
【问题描述】:

我是 grails 的新手,我正在尝试实现 spring 安全核心和多租户单数据库插件。 我先实现了spring security core,实现了自定义AuthenticationProvider和Authentication。 然后我安装了多租户单数据库插件并运行自动创建自定义tenantResolver和tenantRepository的'mt-spring-security'脚本。我在tenantResolver 中硬编码了tenantId 用于测试目的。 我在域类中添加了@MultiTenant 注释。

@多租户

类 ClientUser 实现可序列化 {

long idclient_user
Userprofile user
Client client
int tenantId
...

}

在 AuthenticationProvider 中,没有为当前租户过滤 ClientUser 数据。它将数据带给所有租户。

类 ClientAuthenticationProvider 实现 AuthenticationProvider {

Authentication authenticate(Authentication auth) throws AuthenticationException {
    ClientAuthentication authentication = auth
    String password = authentication.credentials
    String username = authentication.name
    String clientName = authentication.clientName
    ...
    Userprofile.withTransaction { status ->

        def user = Userprofile.findWhere(username: username)
        def client = Client.findWhere(clientname: clientName)
        def clientUser = ClientUser.findWhere(client: client, user: user) <-- NOT FILTERED FOR THE CURRENT TENANT. I HARD-CODED INVALID TENANTID IN THE TENANTRESOLVER AND EXPECTING IT TO FAIL BUT IT STILL FINDS THE USER.

        if (!clientUser) {
            throw new UsernameNotFoundException('User not found', username)
        }
        ...
    }
    ...
    result
}

我不确定多租户和 Spring Security 是如何协同工作的。我很难理解架构/设计。

如果有人可以为我提供示例实现或为我指明正确的方向,那将非常有帮助。 谢谢, 吃饭

【问题讨论】:

    标签: multi-tenant


    【解决方案1】:

    问题是多租户过滤器是在 spring 安全过滤器之前注册的,所以在 Spring 安全认证之后才会调用tenantResolver。我通过在 config.groovy 中将 resolveTenantBeforeLogin 设置为 true 解决了这个问题

    在 config.groovy 中,添加这一行

    multiTenant.resolveTenantBeforeLogin=true

    我添加这行后,先调用tenantResolver,再调用身份验证。

    【讨论】:

      猜你喜欢
      • 2011-11-23
      • 2016-04-16
      • 2015-12-09
      • 2015-04-09
      • 2018-11-02
      • 2016-06-12
      • 2012-06-01
      • 2014-09-17
      • 2011-10-19
      相关资源
      最近更新 更多