有 Java 编程相关的问题?

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

java DAO函数,通过字符串concat将变量填充到SQL查询中,而不是使用var args和命名查询

我有一些DAO函数,它们通过字符串concat将变量填充到SQL查询中,而不是使用var args和命名查询。这会导致潜在的SQL注入漏洞以及HBM查询问题,如日期格式、日期时区问题等

我将发布一个代码,下面我需要转换为使用varargs。我有很多这样的改变要做,但如果有人能指导我如何做,我可以尝试修复其余的。谢谢

public Bidstage findBidstageByName(int companyId, String bidStageName) {
        StringBuffer qbe = new StringBuffer();
        qbe.append("select b from Bidstage b where b.deleted=0 and b.company.idCompany="+companyId+" and b.name='"+bidStageName+"'");
        return (Bidstage) super.findUniqueByQuery(qbe.toString());
    }

对于上述方法,我需要使用varagrs

这就是findUniqueByQuery()的用法

protected T findUniqueByQuery(String qbe) throws InfrastructureException { 
Collection<T> c = list(qbe); 
return c.size() > 0 ? c.iterator().next(): null; }

这是我的列表,看起来它使用了varargs。我有一个scratch项目,正在尝试学习一些编码实践。这是否意味着它正在使用瓦拉格

protected Collection<T> list(String qbe, Object... parameterMap) throws InfrastructureException { 
return this.findByQuery(qbe, parameterMap); } 

这是我的findByQuery

public Collection<T> findByQuery(String qbe, Object... parameterMap) throws InfrastructureException {
        return (Collection<T>) anonymousFindByQuery(qbe, parameterMap);
    }

和匿名FindByQuery

public Collection<?> anonymousFindByQuery(String qbe, Object ...parameterMap) 
            throws InfrastructureException{
        getSession();
        try {
            Query q = createQuery(qbe, parameterMap);
            return q.list();
        } //end try
        catch (HibernateException ex) {
            WLog.DAOLogger.error("HibernateException", ex);
            throw new InfrastructureException(ex);
        } //end
    }

这个是createQuery

protected Query createQuery(String qbe, Object... parameterMap) throws InfrastructureException {
        Session session = getSession();
        Query q = session.createQuery(qbe);

        String formattedQuery = String.format("%s ", qbe);

        for (int i = 0; i < parameterMap.length; i = i + 2) {

            //Put the data in easy to use forms.
            Object key = parameterMap[i];
            Object value = parameterMap[i + 1];
            String formattedKey = String.format(":%s ", key);

            if(value == null || formattedQuery.indexOf(formattedKey) == -1){
                continue;
            }

            if(value instanceof ArrayList){
                q.setParameterList(key.toString(), (Collection<?>)value);
            }
            else{
                q.setParameter(key.toString(), value);
            }
        }
        return q;
    }

共 (0) 个答案