通过身份验证的用户的 Spring 安全过滤器

时间:2021-05-05 14:19:14

标签: spring spring-boot spring-security

Spring Boot 中过滤所有实体查询的最佳方法是什么,添加经过身份验证的用户检查(使用身份验证名称字段)?

  1. 在实体上添加一个 where 休眠?可能吗?

  2. 添加 Spring Security postFilter?我不明白是否应该将它添加到我的存储库或我的服务中。这不是一个效率低下的系统(而不是执行过滤查询)?

编辑
不,我没有使用 Spring-Data,但我可以将它添加到我的项目中。

例如,如果我的仓库是:

public interface MyRepository extends JpaRepository<MyEntity, Long>, QuerydslPredicateExecutor<MyEntity>, QuerydslBinderCustomizer<QMyEntity> {
  ...
}

我必须覆盖我在项目中使用的 JpaRepository 和 QuerydslPredicateExecutor 和 QuerydslPredicateExecutor 类的所有方法?正确吗?

1 个答案:

答案 0 :(得分:2)

postFilter 不是一个有效的选择,因为它会导致从数据库中获取许多数据,但会丢弃大部分数据。

如果您使用的是 Spring Data JPA,那么您可以使用 Spring Security data integration 并执行类似操作以在查询中包含身份验证名称(从 SecurityContext 自动获取)。

@Repository
public interface BillingRepository extends JpaRepository<Billing,Long> {
    @Query("select b from Billing b where b.userId = ?#{ authentication?.name }")
    Ierable<Billing> findBillings();
}