【问题标题】:SAAS application, subdomain for each companySAAS 应用程序,每个公司的子域
【发布时间】:2019-09-29 13:47:25
【问题描述】:

我在 Eclipse Scout 中创建了应用程序。我使用 company_id id 我在数据库中的表来分隔租户。没问题。

我的问题是,如何为每个公司(租户)生成子域。

示例: 主域名是:myapplication.com 公司(租户): 测试1 测试2

我想要 URL 的 test1.myapplication.com、test2.myapplication.com

当我访问 test1.myapplication.com 时,我需要知道所有内容都将为 test1 租户加载。

在登录页面上,我会查询:SELECT username, password FROM users WHERE username = 'test' AND password = 'test' AND company_id = "Get company ID or name from URL, subdomain"。因为现在是问题所在。如果我在 test1 租户的数据库中有用户名为“test”的用户,我不能在租户 2 上拥有用户名为“test”的用户,因为不知道登录时要加载哪个用户/租户。对于子域,可以使用另一个 AND 条件 AND company_id = 1

这可能吗?

谢谢

【问题讨论】:

    标签: eclipse-scout


    【解决方案1】:

    我认为您的问题并非特定于 Scout 应用程序,而是与一般 Java Authentication and Authorization(又名 JAAS)相关。您可以在 Scout 应用程序中使用 JAAS 的所有底层功能。

    Scout 中的登录功能使用您在 web.xml 中配置的标准 Servlet 过滤器。由于 servlet 过滤器是通过 HTTP 请求调用的,因此您可以在自己的 servlet 过滤器实现中提取子域,并使用该信息来构建具有所需 SQL 约束的 SQL 查询。

    当登录有效时,您可以使用子域和用户名作为主题,例如“test1/username”。在 Scout 中,主题在对后端服务器的每个请求或服务调用中都可用。在那里,您可以从主题中提取子域并使用该信息来执行您的 SQL 查询。

    Scout 小部件应用程序包含有关如何使用 servlet 过滤器的示例。见课程WidgetsUiServletFilter

    【讨论】:

    • 拜托,你能为此做一个例子并在这里发布吗?过滤器示例以及如何访问服务中的子域?
    • 您是否查看了 Scout 小部件应用程序中的示例?在我看来,你应该在那里找到你需要的所有东西。也许您应该仔细查看FormBasedAccessController,尤其是那里使用的 ICredentialVerifier。您需要实现自己的验证器,以适应您的特定环境以及对子域和数据库模型的要求。
    • 如何将子域或 ID 传递给我的验证实现?
    • 我创建了自己的 FormBasedAccessController,自己的 ICredentialVerifier。但我有错误:线程“main”中的异常 org.eclipse.scout.rt.platform.util.Assertions$AssertionException:断言错误:找不到查询实例:com.acme.apps.my.ui.html.CustomFormBasedAccessController .然后我创建了平台侦听器并将自定义类添加到 bean 寄存器,但没有任何改变。
    • 成功了。非常感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多