Spring boot 在每个查询之前设置 postgresql 连接变量

问题描述 投票:0回答:1

我使用 Spring boot、Spring data、Postgresql 和 hikariCP 来管理我的应用程序实体和查询。 我正在使用 Spring boot 存储库查询数据库,并且存储库内的查询/命名函数并不总是用

@Transactional
进行注释。

在我的数据库中,我有一个表

Employee
,它具有行级安全性。行级安全性使用如下会话变量:

create policy employee_rls on Employee for select to public using (manager_id = CAST(current_setting('user_id') as integer));

如何才能在每次从应用程序连接到数据库之前,在连接上设置一个会话变量并在连接关闭后清除它?连接变量应该来自名为

UserService
的 @autowired 服务,即使对于非事务性查询也应该发生。

postgresql spring-boot spring-data row-level-security
1个回答
0
投票

您想考虑创建自定义

DataSource
。请参阅 this 了解使用
ThreadLocal
实现多租户的解决方案。基本上,您可以使用要初始化连接的用户 ID 设置一个本地线程,并且当从数据源获取连接时,自定义数据源将执行 SET。如果未设置线程本地并且获得了自定义数据源的连接,它将通过 RESET 清除用户 ID。

你说用户id的值是从

UserService
获取的。您可以将此服务注入到自定义数据源中。你没有提到如何使用它。

© www.soinside.com 2019 - 2024. All rights reserved.