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】:最好的方法是从客户端发送仅参数(在您的情况下为minID
和maxID
),然后使用Spring JPA Specifications 在服务器端动态构建查询.
【讨论】:
以上是关于java - 如何在spring boot java中编写一个函数来处理JPA存储库中的自定义查询?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 教程 - Elasticsearch
Spring Boot官宣:正式弃用 Java 8,最低要求 Java 17!怎么办?
如何使用嵌入式 tomcat 在 Spring Boot 中增加文件大小上传限制
Spring Boot GS:ConnectionFactory 的 ComponentScan 和 ClassNotFoundException