Spring Boot 在每次查询之前设置 postgresql 连接变量

Spring boot set postgresql connection variable before each query

提问人:hido 提问时间:11/6/2023 更新时间:11/6/2023 访问量:23

问:

我正在使用 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));

我怎样才能做到,在每次从我的应用程序连接到数据库之前,我都会在连接上设置一个会话变量,并在连接关闭后清除它?连接变量应来自调用的@autowired服务,即使没有事务查询,也应该发生连接变量。UserService

PostgreSQL spring-boot spring-data 行级安全性

评论

0赞 Arun Duraisamy 11/7/2023
你能试试这个多租户吗,Spring Boot使用Postgres行级安全性多租户

答:

0赞 Lee Greiner 11/6/2023 #1

您想研究创建一个自定义 .请参阅此内容,了解使用 实现多租户 的解决方案。基本上,您可以使用要初始化连接的用户 ID 在本地设置一个线程,当从数据源获取连接时,自定义数据源将执行 SET。如果未设置线程本地,并且获取了自定义数据源的连接,则将通过 RESET 清除用户 ID。DataSourceThreadLocal

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