Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Spring中在servlet过滤器中启用Hibernate过滤器_Java_Spring_Hibernate_Spring Mvc_Servlets - Fatal编程技术网

Java 在Spring中在servlet过滤器中启用Hibernate过滤器

Java 在Spring中在servlet过滤器中启用Hibernate过滤器,java,spring,hibernate,spring-mvc,servlets,Java,Spring,Hibernate,Spring Mvc,Servlets,我正在开发一个多租户应用程序,这意味着我需要能够根据拥有请求用户配置文件的组织帐户筛选API响应。在我们的模型中,这被称为租户。我有可用的Hibernate过滤器,它允许我控制结果查询的范围,这样“foo”的tenantId下的用户将只看到foo拥有的关联模型中的行 我面临的挑战是,我必须在控制器方法的范围内启用此过滤器,因此我将代码放在相关模型服务的接触点上。这似乎是Servlet过滤器的候选项,但似乎不起作用 为了实现,我向一个@Transactional服务添加了一个publicenabl

我正在开发一个多租户应用程序,这意味着我需要能够根据拥有请求用户配置文件的组织帐户筛选API响应。在我们的模型中,这被称为
租户
。我有可用的Hibernate过滤器,它允许我控制结果查询的范围,这样“foo”的
tenantId
下的用户将只看到foo拥有的关联模型中的行

我面临的挑战是,我必须在控制器方法的范围内启用此过滤器,因此我将代码放在相关模型服务的接触点上。这似乎是Servlet过滤器的候选项,但似乎不起作用

为了实现,我向一个
@Transactional
服务添加了一个public
enableFilter
方法,该服务使用其内部存储库引用来针对我的Hibernate会话启用过滤器。然后,我将
@Autowired
这一点连接到我的servlet过滤器中,这样我就可以获取与当前请求用户相关联的租户,并相应地启用Hibernate过滤器


问题是,这不起作用。似乎Hibernate会话不是处于活动状态,就是在实际服务执行任何工作之前被重置。启用servlet筛选器的Resulting查询不包括我的租户筛选。在我的服务中启用这些过滤器可以让我知道过滤器本身是正确的。我是否遗漏了一些东西,或者我将不得不在我的请求处理的食物链上进一步启用这些过滤器?

过滤器将仅为
enableFilter
方法启用。它们与
会话关联,该会话在事务完成后被销毁(除非在启用筛选器之前还应用了opensessioninview筛选器)。您应该使用筛选器在某些全局资源(例如
ThreadLocal
)中设置租户,然后在事务开始(或调用服务方法)之前使用一些AOP启用筛选器。谢谢!您是否看到或意识到这方面的工作示例?在我开始在我当前的项目中使用Google rabbit之前,甚至在多租户成为新的流行语之前,我都很好奇。我甚至在博客上写过。那里使用的代码至今仍在生产中。。。