2016-10-11 4 views
0

Ich möchte hql Abfragen generieren, in denen sowohl die persistenten Objektvariablen als auch ihre Werte zur Laufzeit (zum Zweck der Aktualisierung einzelner Felder) ausgewählt werden können. Ie Etwas wie das Folgende :Sichere dynamische Bindung von Feldern in hql

String field, value; 
String queryString = "update User u set u."+field+" = "+ value +" where (someCondition)" 

Dieser Code funktioniert, ist aber nicht sicher gegen Hql-Injektion. dies mit der benannten Parameter Methode

Update user u set :field = :value where (someCondition) 

wirft einen querySyntaxException zu tun versuchen:

"expecting IDENT, found ":"; 

Ich erhalte eine ähnliche Fehlerpositions Bindung mit einer Abfragezeichenfolge versucht "... u.?=? ..."

Antwort

0

Auf der offchance, dass jemand anderes ist auf der Suche nach, wie dies zu tun: Ich habe realisiert warum ist es wahrscheinlich nicht möglich, gegen Hql Injektion des Feldnamens zu schützen: der Endbenutzer sh Ich könnte mir die Namen meiner Objektvariablen nicht merken [* facepalm].

So kann ich das Problem lösen, indem sie frei meine Zeichenfolge für die Membervariable concatentating, aber einen benannten Parameter verwenden, sicher den Wert dieses Variable eingefügt werden (die der Benutzer zur Verfügung stellen wird.)

String queryString = "update User u set u." + field + " = :value where (someCondition)"; 

usw.

Verwandte Themen