java - 过滤所有查询的数据

标签 java mysql spring jpa

我用 Spring 和 Mysql 创建了一个新的应用程序(但我相对自由地使用其他东西) 在此应用程序中,用户登录不能看到所有数据(用户“admin”除外)。 群有一棵树,用户在群里。一个用户只能看到他的组(或后代组)的用户(或其他对象)。

我试图找到“优雅”地做到这一点的想法: 例如,如果我写:productDao.findAll(),它会返回所有已过滤的产品,而无需重写所有 DAO 中的所有请求。

如果不存在,我接受各种想法:重构数据库?为其他数据库更改 mysql,不使用 JPA,其他...或者可能是,我走错了路,做这样的事情是个坏主意...

最佳答案

  1. 使用 Spring Security 4。它也支持角色和分层角色
  2. 使用 Spring Data JPA 创建您的 DAO。它与 Spring Security 4 集成

这是使用 Spring Data JPA 编写 DAO 的示例。您编写接口(interface),SDJ 为您创建类。

public interface ProductRepository extends JpaRepository<Product, Long> {

    @Query("select e from #{#entityName} e where e.owner = ?#{principal?.username}")
    Page<Product> findAll(Pageable pageable);
}

实际上,您会在基础存储库中执行此操作并对其进行扩展。

您需要创建一个扩展 EvaluationContextExtensionSupport 的 bean ?#{principal?.username} 安全表达式起作用

关于java - 过滤所有查询的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32744586/

相关文章:

php - 当字段值更改时将记录复制到另一个表

java - 无法使用 Scala 和 Spring MVC 3 返回 JSON

java - jpos QMUX 是否支持限制并发 ISO 请求的数量?

java - Spring Boot 2 多数据源初始化架构

java - 用java在数据库服务器中创建文件

Java "-cp"选项,编译时还是运行时?

java - JVM catch InterruptedException 时是否需要退出

php - PHP 页面上的 MySQL 语法错误

mysql - SQL 查询执行时间过长

java - 将 Spring Security 添加到 Gradle 项目会破坏 Spring Data JPA?