我们正在使用这个剧本!HTTP会话的框架。
tenantId和ipAddress是多个表中常见的列。
当用户登录时,我们将tenantId存储在HttpContextSession中
每当我们需要用户的ip地址时,我们就使用Http.Context.current().request().remoteAddress()来存储ip地址。
我们已经编写了大量的查询,现在我们希望以通用的方式为tenantId保存或查询。
所有查询都是通过GenericDao进行的
我们是否可以在GenericDao中使用以下内容来获取租户Id,以便可以附加到所有查询中?
Http.Context.session().get("tenantId");保存或检索这些详细信息的最佳方法是什么?
谢谢。
发布于 2017-09-12 22:55:25
您不希望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”或类似的系统。
https://stackoverflow.com/questions/39471925
复制相似问题