有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    可以使用如下参数:

     Query q = em.createNativeQuery(
            "select CUST_INFO_COURT.GET_CUSTOMER_INFO(?,?) from dual");
     q.setParameter(1, pinCode);
     q.setParameter(2, voen);