Java Hibernate Search Like Query - 注入保护 - 参数绑定?

问题描述

我有一个休眠搜索,允许通过他们的描述搜索工作。这使用类似查询来匹配在描述中找到的任何词与正在搜索的词。下面的代码是有效的,但是很容易以'或'1'='1的形式被输入到搜索框中。这将输出我当然不想要的整个表格。

log.debug("REST request to search Jobs for query {}",query);
Session session = HibernateUtil.getSession();
Query a = session.createQuery("select jobs from Jobs jobs where jobs.description like '%" + query + "%'");
return a.list();

我相信我需要使用参数绑定来纠正这个问题,但是我似乎无法让它工作。下面是我尝试过的一些代码,但是我只是收到了 500 内部服务器错误。我找不到任何使用类似查询的示例,因此这引起了一些混乱。我可能忽略了一些明显的东西,因为我以前从未使用过休眠。

Query a = session.createQuery("select jobs from Jobs jobs where jobs.description like '%" + query + "%'");
a.setParameter("description",a);
return a.list();

解决方法

这是在 JPA 中使用命名参数的方式:

Query a = session.createQuery("select jobs from Jobs jobs where jobs.description like '%:queryParam%'");
a.setParameter("queryParam",query);

setParameter 将您在查询中以 : 为前缀的参数的名称作为第一个参数,并将您想要放入其中的值作为第二个参数。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...