为了账号安全,请及时绑定邮箱和手机立即绑定

Postgres Hibernate 设置会话变量以实现行级安全性

Postgres Hibernate 设置会话变量以实现行级安全性

皈依舞 2023-08-04 10:11:16
我无法找到有关我遇到的这个问题的信息。我对在 Postgres 数据库上实现行级安全性感兴趣,并且正在寻找一种能够通过某种形式的拦截器自动设置 postgres 会话变量的方法。现在,我知道通过 hibernate,您可以使用@Filter和执行行级安全性@FilterDef,但是我想在我的数据库上另外设置策略。一个非常简单的方法是在每个查询之前执行 SQL 语句SET variable=value,尽管我还没有找到任何关于此的信息。这是在 spring-boot 应用程序上使用的,每个请求都应该能够访问variable.
查看完整描述

1 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

由于您的应用程序使用 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类。


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


查看完整回答
反对 回复 2023-08-04
  • 1 回答
  • 0 关注
  • 111 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信