컴파일 가능한 Java 코드로 문자열 변환
데이터베이스를 쿼리하면 조건부 구조 내에서 평가가 필요한 저장된 표현식이 제공되는 경우가 많습니다. 이러한 문자열을 Java 컴파일 가능 코드로 변환하는 기능을 통해 사용자 정의 표현식을 동적으로 실행할 수 있습니다. 이 기사에서는 Java의 컴파일러 API를 사용하여 잠재적인 솔루션을 탐색하지만 임의 코드 컴파일과 관련된 잠재적인 위험을 강조합니다.
Java Compiler API 사용
Java 6 이상의 경우, Java 컴파일러 API는 Java 코드를 프로그래밍 방식으로 컴파일하는 수단을 제공합니다. 핵심 구성 요소인 JavaCompiler를 사용하면 메모리에 소스 코드를 정의하여 Comparator 개체를 동적으로 생성하는 기능을 제공할 수 있습니다.
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 + ";" + " }" + "}";
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();
컴파일한 후에는 Comparator를 인스턴스화하고 동적 개체를 실행할 수 있습니다. 표현식:
Comparator comparator = (Comparator) Class.forName(comparableClassName).newInstance();
주의
위 내용은 데이터베이스에서 검색한 문자열을 실행 가능한 Java 코드로 안전하게 컴파일하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!