SAAS 应用程序,每个公司的子域
SAAS application, subdomain for each company
我在 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' 的用户,我不能在 tenant2 上有用户名 'test' 的用户,因为不知道在登录时加载哪个 user/tenant。对于子域,可以使用另一个 AND 条件 AND company_id = 1
这可能吗?
谢谢
我认为您的问题并非特定于 Scout 应用程序,而是与一般 Java Authentication and Authorization(又名 JAAS)相关。您可以在 Scout 应用程序中使用 JAAS 的所有底层功能。
Scout 中的登录功能使用您在 web.xml
中配置的标准 Servlet 过滤器。由于 servlet 过滤器是通过 HTTP 请求调用的,因此您可以在自己的 servlet 过滤器实现中提取 sub-domain,并使用该信息构建具有所需 SQL 约束的 SQL 查询。
当登录有效时,您可以使用sub-domain和user-name作为主题,例如“test1/username”。在 Scout 中,Subject 在每个请求中可用或 service-call 到后端服务器。在那里您可以从主题中提取 sub-domain 并使用该信息来执行您的 SQL 查询。
Scout 小部件应用程序包含有关如何使用 servlet 过滤器的示例。参见 class WidgetsUiServletFilter。
我在 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' 的用户,我不能在 tenant2 上有用户名 'test' 的用户,因为不知道在登录时加载哪个 user/tenant。对于子域,可以使用另一个 AND 条件 AND company_id = 1
这可能吗?
谢谢
我认为您的问题并非特定于 Scout 应用程序,而是与一般 Java Authentication and Authorization(又名 JAAS)相关。您可以在 Scout 应用程序中使用 JAAS 的所有底层功能。
Scout 中的登录功能使用您在 web.xml
中配置的标准 Servlet 过滤器。由于 servlet 过滤器是通过 HTTP 请求调用的,因此您可以在自己的 servlet 过滤器实现中提取 sub-domain,并使用该信息构建具有所需 SQL 约束的 SQL 查询。
当登录有效时,您可以使用sub-domain和user-name作为主题,例如“test1/username”。在 Scout 中,Subject 在每个请求中可用或 service-call 到后端服务器。在那里您可以从主题中提取 sub-domain 并使用该信息来执行您的 SQL 查询。
Scout 小部件应用程序包含有关如何使用 servlet 过滤器的示例。参见 class WidgetsUiServletFilter。