我们正在使用Play! HTTP会话的框架。
tenantId
和ipAddress
是在多个表中共有的列。
当用户登录时,我们会将tenantId
存储在HttpContextSession
每当我们需要用户的IP地址时,我们使用Http.Context.current().request().remoteAddress()
来存储IP地址。
我们编写了大量查询,现在我们想以tenantId
的通用方式保存或查询。
所有查询都通过GenericDao
进行我们可以在GenericDao中使用以下内容来获取租户ID,以便我们可以在所有查询中附加吗?
Http.Context.session().get("tenantId");
保存或检索这些详细信息的最佳方法是什么?
感谢。
答案 0 :(得分:0)
您不希望您的DAO必须依赖于表示层,例如HTTP会话。我建议使用抽象来隐藏这些细节。
创建一个名为TenantIdProvider的接口并将其注入DAO。它看起来像这样:
public interface TenantIdProvider
{
String getTenantId();
}
然后创建一个名为HttpSessionTenantIdProvider的实现。
class HttpSessionTenantIdProvider implements TenantIdProvider
{
@Override
public String getTenantId()
{
return Http.Context.session().get("tenantId");
}
}
现在,您的GenericDAO可以引用TenantIdProvider,并且每个需要tenantId的查询都可以通过TenantIdProvider获取它,并且不依赖于您使用的play框架或任何其他表示层。
如果你最终拥有运行和发送通知或其他任务的预定作业,这真的变得很重要,并且他们使用这个DAO。如果这个DAO依赖于HTTP会话,则不可能。您的工作应用程序可以创建一个刚刚返回的TenantIdProvider" system"或类似的东西。