首页 > 解决方案 > 在连接字符串上设置 JPA 查询参数

问题描述

所以我对最好的做法有点困惑:

我正在使用基于 Primefaces 的 Web 框架,并且我的页面包含一个数据表组件。该组件链接到实现加载方法的支持 bean:

public List<TableElement> loadTableElements(int firstElementIndex, int pageSize, 
            String sortField, SortOrder sortOrder, Map<String, Object> filters) {
    // pass parameters for pagination, filtering and sorting to some service
    return tableService.loadTable(firstElementIndex, pageSize, sortField, sortOrder, filters)
}

所以现在我有用户输入(过滤部分),它被传递给我想从数据库中获取数据的某个服务。

现在服务方法看起来像这样,但我担心 SQL 注入。该解决方案将使用参数化查询而不是连接潜在的恶意字符串,但是考虑到 SQL 语句广泛依赖于参数,我很难构建它们:

public List<TableElement> loadTable(int firstElementIndex, int pageSize, 
            String sortField, String sortOrder, Map<String, Object> filters) {
    String queryString = "SELECT Table.id, Stuff.stuffles FROM Table " +
        "LEFT JOIN Stuff ON Table.stuff_id = Stuff.id ";

    queryString += addSorting(sortField, sortOrder);
    queryString += addFiltering(filters);
    ...
    Query query = entityManager.createNativeQuery(queryString, "TableElement");
}

现在我希望你能看到我遇到的问题:我可以用占位符构建一个字符串,但我只能在构建查询字符串时替换它们。但是我没有关于设置多少参数和哪些参数的信息。

我想有一些简单的解决方案,但我现在没有看到它。提前致谢!

标签: sqljpasql-injection

解决方案


推荐阅读