Я интегрирую Groovy Оболочку в приложение Java, чтобы пользователи могли выполнять вычисления для своих доменных объектов. Я использую CompilerConfiguration
, чтобы ограничить то, что они могут сделать по очевидным причинам безопасности. Я хотел бы ограничить ClassesWhiteList
только коробочными примитивами. Однако, когда я передаю Double
через Binding
, я получаю исключение Usage of variables of type [java.lang.Object]
. Я ожидаю, что следующее пройдет, но это произойдет, только если я включу Object.class
в свой белый список класса.
SecureASTCustomizer secure = new SecureASTCustomizer();
secure.setConstantTypesClassesWhiteList(List.of(Double.class));
CompilerConfiguration configuration = new CompilerConfiguration().addCompilationCustomizers(secure);
Binding binding = new Binding();
Double value = 42.0;
binding.setVariable("foo", value);
Object foo = new GroovyShell(binding, configuration).evaluate("foo");
assertEquals(42.0, foo);
Есть ли способ, которым я могу использовать Bindings / Compiler Options, чтобы это передать?