gpt4 book ai didi

java - 如何在 Java 的泛型方法中创建安全的 createQuery?

转载 作者:行者123 更新时间:2023-11-30 09:08:15 26 4
gpt4 key购买 nike

我自己的 Persistence 类中有以下通用方法:

@SuppressWarnings("unchecked")
public static <T> T getByCondition(Class<T> clazz, String database, Object id){
EntityManager em = getEntityManager(database);
Query q = em.createQuery("SELECT t FROM "+clazz.getName()+" t WHERE t.id = :id").setParameter("id", id);
T result = (T) q.getSingleResult();
return result;
}

该方法工作得很好,但我担心查询中的 "+clazz.getName()+",因为我不太确定这是否会导致 sql 注入(inject)。

有没有更好的方法来声明我要在查询中搜索的类?

预先感谢您的回答。 :-)

最佳答案

您发布的代码是安全的,因为类 Class是最终的,不能被扩展,并且与它所代表的类紧密相关,这意味着您将无法将其传递给 getName() 返回自定义字符串的假类,此外您不能有一个类名,其中包括使用 SQL 注入(inject)所需的标点符号。例如,这是不可能的:

class ' or '1'='1; DROP TABLE USERS; --

关于java - 如何在 Java 的泛型方法中创建安全的 createQuery?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23633412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com