javajavax。坚持不懈EntityManager SQL注入
在您已经看到的这个方法中,我根据pincode或voen从oracle数据库中的过程接收数据
@Override
public List<BaseClass> getCustomerInfo(String pinCode, String voen) throws SQLException, JsonProcessingException {
List<BaseClass> customerInfos = new ArrayList<>();
Query q = em.createNativeQuery("select CUST_INFO_COURT.GET_CUSTOMER_INFO('" + pinCode + "','" + voen + "') from dual");
List objectArray = q.getResultList();
for (Object object : objectArray) {
if (object != null) {
Clob clob = (Clob) object;
String arrayJsonData = clob.getSubString(1, (int) clob.length());
final ObjectMapper objectMapper = new ObjectMapper();
CustomerInfo[] langs = objectMapper.readValue(arrayJsonData, CustomerInfo[].class);
List<CustomerInfo> langList = new ArrayList(Arrays.asList(langs));
for (CustomerInfo customerInfo : langList) {
customerInfos.add(customerInfo);
}
return customerInfos;
}
}
return new ArrayList<>();
}
但有一个问题。问题是,我可以根据pin码接收数据,但当我作为voen搜索时,我无法获得值。当我根据pin码进行搜索时,我的查询是这样工作的
Hibernate:
select
CUST_INFO_COURT.GET_CUSTOMER_INFO('',
'null')
from
dual
输出中的数据如下所示:
[
{
"full_name": "",
"doc_sr": "",
"doc_id": "",
"customer_id": ,
"pin_code": "",
"voen": "",
"position": null
}
]
当我根据voene搜索时,它也会做同样的事情
Hibernate:
select
CUST_INFO_COURT.GET_CUSTOMER_INFO('null',
'')
from
dual
输出中的数据如下所示:
[]
我认为有一个问题是SQL注入。我正在考虑使用setParameter()
方法以这种方式发送参数,但我不知道如何将其应用于此代码
# 1 楼答案
可以使用如下参数: