我正在开发一个多租户应用程序,这意味着我需要能够根据拥有请求用户配置文件的组织帐户过滤API响应。在我们的模型中,这被称为Tenant
。我已经使用了Hibernate过滤器,它允许我控制生成的查询的范围,以便tenantId
下的用户在" foo"只会看到相关模型中的行,这些行也归foo所有。
我遇到的挑战是我必须在控制器方法的范围内启用此过滤器 - 因此我将代码放在相关模型服务中的接触点。这似乎是Servlet过滤器的候选者,但似乎不起作用。
为了实现,我向enableFilter
服务添加了一个公共@Transactional
方法,该服务使用其内部存储库引用来启用针对我的Hibernate会话的过滤器。然后我@Autowired
进入我的servlet过滤器,这样我就可以拾取与当前请求用户关联的租户并相应地启用Hibernate过滤器。
问题是,这不起作用。似乎Hibernate会话要么不活动,要么在实际服务执行任何工作之前重置。启用了servlet过滤器的ressulting查询不包括我的租户过滤。在我的服务中启用这些过滤器,我知道过滤器本身是正确的。是否有我遗漏的东西,或者我是否需要在我的请求处理的食物链中进一步启用这些过滤器?