Java 如何在GenericDao中检索公共值(IpAddress、TenantId)?

Java 如何在GenericDao中检索公共值(IpAddress、TenantId)?,java,playframework,playframework-2.0,genericdao,Java,Playframework,Playframework 2.0,Genericdao,我们正在使用该剧!HTTP会话的框架 tenantId和ipAddress是跨多个表通用的列 当用户登录时,我们将tenantId存储在HttpContextSession 每当我们需要用户的ip地址时,我们都使用Http.Context.current().request().remoteAddress()来存储ip地址 我们编写了大量查询,现在我们希望以一种通用的方式保存或查询tenantId 所有查询都通过GenericDao进行 我们是否可以在GenericDao中使用以下命令来获取租户

我们正在使用该剧!HTTP会话的框架

tenantId
ipAddress
是跨多个表通用的列

当用户登录时,我们将
tenantId
存储在
HttpContextSession

每当我们需要用户的ip地址时,我们都使用
Http.Context.current().request().remoteAddress()
来存储ip地址

我们编写了大量查询,现在我们希望以一种通用的方式保存或查询
tenantId

所有查询都通过GenericDao进行

我们是否可以在GenericDao中使用以下命令来获取租户Id,以便在所有查询中追加

Http.Context.session().get("tenantId");
保存或检索这些详细信息的最佳方法是什么


谢谢。

您不希望DAO必须依赖于表示层,比如HTTP会话。我建议使用抽象来隐藏这些细节

创建一个名为TenantIdProvider的接口,并将其注入DAO。它看起来像这样:

public interface TenantIdProvider
{
    String getTenantId();
}
然后创建一个名为HttpSessionTenantProvider的实现

class HttpSessionTenantIdProvider implements TenantIdProvider
{
    @Override
    public String getTenantId()
    {
        return Http.Context.session().get("tenantId");
    }
}
现在,您的GenericDAO可以引用tenantId提供程序,并且每个需要tenantId的查询都可以通过tenantId提供程序获得它,而不依赖于play框架或您使用的任何其他表示层


如果您最终拥有运行并发送通知或其他任务的计划作业,并且它们使用此DAO,那么这一点就变得非常重要。如果此DAO依赖于HTTP会话,则不可能。你的求职应用程序可以创建一个只返回“系统”或类似内容的租户服务提供商

50
rep不会给你一个离题/过于宽泛/基于观点的答案,这个答案很可能在悬赏期满后立即关闭并删除。你没有提供Play Framework的版本,1.x和2.x有显著不同。2.x版本是正在使用的当前版本