gpt4 book ai didi

java - Postgres Hibernate 设置 session 变量以实现行级安全性

转载 作者:行者123 更新时间:2023-12-02 09:31:07 25 4
gpt4 key购买 nike

我无法找到有关我遇到的这个问题的信息。我对在 Postgres 数据库上实现行级安全性感兴趣,并且正在寻找一种能够通过某种形式的拦截器自动设置 postgres session 变量的方法。现在,我知道通过 hibernate,您可以使用 @Filter@FilterDef 执行行级安全性,但是我想在我的数据库上另外设置策略。

一个非常简单的方法是在每个查询之前执行 SQL 语句 SET variable=value,尽管我还没有找到任何相关信息。

这是在 spring-boot 应用程序上使用的,每个请求都应该能够访问变量的请求特定值。

最佳答案

由于您的应用程序使用 spring,您可以尝试通过以下几种方法之一来完成此操作:

Spring AOP

在这种方法中,您编写一条建议,要求 spring 应用到特定方法。如果您的方法使用 @Transactional 注释,您可以在事务开始后立即将建议应用于这些方法。

扩展 TransactionManager 实现

假设您的事务正在使用 JpaTransactionManager

public class SecurityPolicyInjectingJpaTransactionManager extends JpaTransactionManager {
@Autowired
private EntityManager entityManager;

// constructors

@Override
protected void prepareSynchronization(DefaultTransactionStatus status, TransactionDefinition definition) {
super.prepareSynchronization(status, definition);
if (status.isNewTransaction()) {
// Use entityManager to execute your database policy param/values

// I would suggest you also register an after-completion callback synchronization
// This after-completion would clear all the policy param/values
// regardless of whether the transaction succeeded or failed
// since this happens just before it gets returned to the connection pool
}
}
}

现在只需配置您的 JPA 环境即可使用自定义 JpaTransactionManager 类。

<小时/>

可能还有其他的,但我想到的就是这两个。

关于java - Postgres Hibernate 设置 session 变量以实现行级安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57962473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com