java - 如何在spring boot java中编写一个函数来处理JPA存储库中的自定义查询?

Posted

技术标签:

【中文标题】java - 如何在spring boot java中编写一个函数来处理JPA存储库中的自定义查询?【英文标题】:How to write a function to handle custom query in JPA repository in spring boot java? 【发布时间】:2019-09-03 12:14:14 【问题描述】:

基本上,我使用 Spring Boot 在服务器端托管一个数据库。我想从客户端编写自定义查询,该查询是用角度开发的,并从服务器端调用一个函数来给我所需的结果。

服务器端的函数如下所示:

List<rows> func(String customQuery)
  //fetch rows from table using this custom query and return those rows
  //which I can use in client side.

Below are examples of customQuery which I need to send from client side:
select * from table;
select * from table where id>10;
select * from table where id>20 and id<30;

到目前为止,我在互联网上搜索我找不到任何解决方案。请帮忙。

【问题讨论】:

这看起来像是一个巨大的安全漏洞。如何检索自定义查询?网络服务? 【参考方案1】:

直接从客户端发送 SQL 将导致完全的安全故障,因为恶意用户可以很容易地弄清楚它的工作原理并发送delete from table 来杀死您的整个应用程序。 更糟糕的是,他们甚至可以运行 create user ... 以完全访问您的整个数据库、获取敏感信息、安装恶意软件等。

相反,您需要使用诸如

之类的方法在您的应用程序中创建一个 REST 服务
GET /table
GET /table?minId=10
GET /table?minId=20&maxId=30

application/json 或类似的数据格式返回,仅返回您的 Angular 应用真正需要的信息。 然后 Angular 将负责选择性地使用您的数据更新显示。


编辑: 这是我找到的用于创建基于 Spring Boot 和 Angular 的基本 Web 应用程序的指南。对您来说可能是一个很好的起点: https://www.baeldung.com/spring-boot-angular-web

【讨论】:

【参考方案2】:

最好的方法是从客户端发送仅参数(在您的情况下为minIDmaxID),然后使用Spring JPA Specifications 在服务器端动态构建查询.

【讨论】:

以上是关于java - 如何在spring boot java中编写一个函数来处理JPA存储库中的自定义查询?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 教程 - Elasticsearch

Spring Boot官宣:正式弃用 Java 8,最低要求 Java 17!怎么办?

为什么选择Spring Boot?

Spring boot聚合项目mapper接口无法注入问题

如何使用嵌入式 tomcat 在 Spring Boot 中增加文件大小上传限制

Spring Boot GS:ConnectionFactory 的 ComponentScan 和 ClassNotFoundException