gpt4 book ai didi

java - Multi-Tenancy 应用程序中的 Spring Social,每个租户都有唯一的 ConnectionFactory 实例

转载 作者:行者123 更新时间:2023-11-30 09:20:16 25 4
gpt4 key购买 nike

我正在构建一个支持 Multi-Tenancy 的 Spring Social 应用程序。应用程序根据 url 识别租户(例如,tenant1.example.com 和 tenant2.example.com)。我想允许应用程序的用户使用 Facebook 或 Twitter 进行连接。我遇到的问题是每个租户都是一个独特的企业,并且将拥有自己独特的一组 Facebook 和 Twitter 凭据。我认为我的 ConnectionFactoryRegistry 中不能有多个 Facebook ConnectionFactory 实例或多个 Twitter ConnectionFactory 实例。例如,这将不起作用:

ConnectionFactoryRegistry registry = new ConnectionFactoryRegistry();
registry.addConnectionFactory(new FacebookConnectionFactory("tenant1ClientId", "tenant1ClientSecret"));
registry.addConnectionFactory(new FacebookConnectionFactory("tenant2ClientId", "tenant2ClientSecret"));

上述方法不起作用,因为根据 Spring Social 文档,定位器返回单个实例。

public interface ConnectionFactoryLocator {
ConnectionFactory<?> getConnectionFactory(String providerId);
<A> ConnectionFactory<A> getConnectionFactory(Class<A> apiType);

Set<String> registeredProviderIds();
}

我考虑过在 preConnect() 步骤中创建一个 ConnectInterceptor 并将相关租户凭据注入(inject)到提供的 ConnectionFactory 实例中,但我怀疑这在多线程 Web 应用程序中不起作用,因为 connectionFactory 实例是共享的。

因此,我的下一个想法是为每个租户简单地创建一个唯一的 ConnectionFactoryRegistry 实例。这样就解决了上面的问题。

但随后问题转移到 ConnectController(Spring 的 OAuth 舞蹈 Controller )。由于应用程序只能有一个 Controller ,而 Controller 只能拥有一个注册中心,我将如何指示 Controller 根据租户使用正确的注册中心?

构建支持每个租户唯一 ConnectionFactory 实例的 Multi-Tenancy Spring Social 应用程序的正确方法是什么?理想情况下,我不想在 XML 中定义 ConnectionFactory 实例,因为它们是动态的并且存储在数据库中。

最佳答案

我以前遇到过类似的问题。 Spring Social + 多语言站点(example.de、example.fr、...)=> 多个 facebook 应用程序(因为使用 Facebook 应用程序,您只能将用户返回到同一域)。我最终得到了我的自定义版本的 ConnectController(实际上它是 ProviderSignInController)和一个帮助程序类(我不确定名称、ConnectionSupport 或类似的东西),以便能够在运行时正确选择 FacebookConnectionFactory。

关于java - Multi-Tenancy 应用程序中的 Spring Social,每个租户都有唯一的 ConnectionFactory 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17488571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com