Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Menyusun Rentetan Diambil Pangkalan Data dengan Selamat ke dalam Kod Java Boleh Laku?

Bagaimanakah Saya Boleh Menyusun Rentetan Diambil Pangkalan Data dengan Selamat ke dalam Kod Java Boleh Laku?

Susan Sarandon
Lepaskan: 2024-12-02 04:02:09
asal
299 orang telah melayarinya

How Can I Safely Compile Database-Retrieved Strings into Executable Java Code?

Penukaran Rentetan kepada Kod Java Boleh Kompil

Menyiasat pangkalan data selalunya menyediakan ungkapan tersimpan yang memerlukan penilaian dalam struktur bersyarat. Keupayaan untuk menukar rentetan ini kepada kod kompilasi Java membolehkan pelaksanaan dinamik ungkapan tersuai. Artikel ini meneroka kemungkinan penyelesaian menggunakan API Pengkompil Java, tetapi menyerlahkan potensi risiko yang terlibat dalam menyusun kod arbitrari.

Menggunakan Java Compiler API

Untuk Java 6 dan ke atas, Java Compiler API menawarkan cara untuk menyusun kod Java secara pemrograman. Komponen teras, JavaCompiler, membolehkan anda mentakrifkan kod sumber dalam memori, menawarkan keupayaan untuk mencipta objek Comparator secara dinamik.

String comparatorClassName = ...; // Random name for comparison class
String expression = ...; // Retrieved database expression
String source = "public class " + comparatorClassName + " implements Comparable<" + comparableClassName + "> {" +
                "    public int compare(" + comparableClassName + " a, " + comparableClassName + " b) {" +
                "        return " + expression + ";" +
                "    }" +
                "}";
Salin selepas log masuk
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
Writer out = null; // Output writer
Iterable<? extends JavaFileObject> compilationUnits = new ArrayList<>();
compilationUnits.add(new SimpleJavaFileObject() { /* Details for loading source String */ });
compiler.getTask(out, null, null, null, null, compilationUnits).call();
Salin selepas log masuk

Setelah disusun, anda boleh membuat instantiate Comparator dan melaksanakan dinamik ungkapan:

Comparator comparator = (Comparator) Class.forName(comparableClassName).newInstance();
Salin selepas log masuk

Awas

  • Menyusun kod Java sewenang-wenangnya menimbulkan risiko keselamatan. Hanya susun kod yang dipercayai.
  • Penyelesaian ini belum diuji secara menyeluruh kerana pengehadan pada objek pengkompil.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyusun Rentetan Diambil Pangkalan Data dengan Selamat ke dalam Kod Java Boleh Laku?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan