adorsys / adorsys/keycloak-config-cli
Javascript variable substitution throws exception with latest Docker image
- 主要语言
- Java
- 星标
- 1.2k
- 派生
- 200
- PR 合并指标
- 30 天内没有已合并 PR
描述
### Current Behavior
When using the latest docker image (latest-26) to import a config file with javascript variable substitution, an AccessDeniedException exception is thrown from GraalVM for directory "/nonexistent" (home dir of nobody user)
### Expected Behavior
Config file is imported successfully.
### Steps To Reproduce
```markdown
1. Create config file with javascript variable substitution
2. Run docker command:
docker run --rm \
-e KEYCLOAK_URL="http://localhost:8080" \
-e KEYCLOAK_USER=admin \
-e KEYCLOAK_PASSWORD=admin123 \
-e IMPORT_FILES_LOCATIONS='/config/*' \
-e IMPORT_VARSUBSTITUTION_SCRIPTEVALUATIONENABLED=true \
-v "$PWD/contrib/example-config":/config \
adorsys/keycloak-config-cli:latest-26
```
### Deployment Method
Docker
### Environment
- Keycloak Version: 26.4.6
- keycloak-config-cli Version: 6.5.0
- Java Version: 21
### Relevant configuration (sanitized)
```yaml
{
"realm": "test",
"displayName": "$${javascript:'DisplayName'}"
}
```
### Logs / error output
```shell
2026-03-22T07:53:30.079Z INFO 1 --- [ main] d.a.k.config.KeycloakConfigApplication : Starting KeycloakConfigApplication v6.5.0 using Java 21.0.10 with PID 1 (/app/keycloak-config-cli.jar started by nobody in /)
2026-03-22T07:53:30.085Z INFO 1 --- [ main] d.a.k.config.KeycloakConfigApplication : No active profile set, falling back to 1 default profile: "default"
2026-03-22T07:53:31.126Z INFO 1 --- [ main] d.a.k.config.KeycloakConfigApplication : Started KeycloakConfigApplication in 1.695 seconds (process running for 2.319)
2026-03-22T07:53:31.627Z INFO 1 --- [ main] d.a.k.config.KeycloakConfigRunner : keycloak-config-cli ran in 00:00.064.
2026-03-22T07:53:31.631Z INFO 1 --- [ main] .s.b.a.l.ConditionEvaluationReportLogger :
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled.
2026-03-22T07:53:31.652Z ERROR 1 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.InternalError: java.lang.reflect.InvocationTargetException
at com.oracle.truffle.runtime.ModulesSupport.loadModulesSupportLibrary(ModulesSupport.java:170)
at com.oracle.truffle.runtime.ModulesSupport.(ModulesSupport.java:59)
at com.oracle.truffle.runtime.hotspot.HotSpotTruffleRuntimeAccess.createRuntime(HotSpotTruffleRuntimeAccess.java:84)
at com.oracle.truffle.runtime.hotspot.HotSpotTruffleRuntimeAccess.getRuntime(HotSpotTruffleRuntimeAccess.java:75)
at com.oracle.truffle.api.Truffle.createRuntime(Truffle.java:145)
at com.oracle.truffle.api.Truffle$1.run(Truffle.java:176)
at com.oracle.truffle.api.Truffle$1.run(Truffle.java:174)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at com.oracle.truffle.api.Truffle.initRuntime(Truffle.java:174)
at com.oracle.truffle.api.Truffle.(Truffle.java:63)
at com.oracle.truffle.runtime.enterprise.EnterpriseTruffle.supportsEnterpriseExtensions(stripped:22)
at com.oracle.truffle.polyglot.enterprise.EnterprisePolyglotImpl.getPriority(stripped:551)
at java.base/java.util.Comparator.lambda$comparing$77a9974f$1(Unknown Source)
at java.base/java.util.TimSort.countRunAndMakeAscending(Unknown Source)
at java.base/java.util.TimSort.sort(Unknown Source)
at java.base/java.util.Arrays.sort(Unknown Source)
at java.base/java.util.ArrayList.sort(Unknown Source)
at java.base/java.util.Collections.sort(Unknown Source)
at org.graalvm.polyglot.Engine.loadAndValidateProviders(Engine.java:1641)
at org.graalvm.polyglot.Engine$1.run(Engine.java:1717)
at org.graalvm.polyglot.Engine$1.run(Engine.java:1712)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at org.graalvm.polyglot.Engine.initEngineImpl(Engine.java:1712)
at org.graalvm.polyglot.Engine$ImplHolder.(Engine.java:170)
at org.graalvm.polyglot.Engine.getImpl(Engine.java:422)
at org.graalvm.polyglot.Engine$Builder.build(Engine.java:724)
at org.graalvm.polyglot.Context$Builder.build(Context.java:1925)
at de.adorsys.keycloak.config.service.script.JavaScriptEvaluator.evaluate(JavaScriptEvaluator.java:36)
at de.adorsys.keycloak.config.provider.KeycloakImportProvider.evaluateScripts(KeycloakImportProvider.java:237)
at de.adorsys.keycloak.config.provider.KeycloakImportProvider.substituteImportResource(KeycloakImportProvider.java:216)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.base/java.util.ArrayList.forEach(Unknown Source)
at java.base/java.util.stream.SortedOps$RefSortingSink.end(Unknown Source)
at java.base/java.util.stream.Sink$ChainedReference.end(Unknown Source)
at java.base/java.util.stream.Sink$ChainedReference.end(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
at de.adorsys.keycloak.config.provider.KeycloakImportProvider.readFromLocations(KeycloakImportProvider.java:142)
at de.adorsys.keycloak.config.KeycloakConfigRunner.run(KeycloakConfigRunner.java:81)
at org.springframework.boot.SpringApplication.lambda$callRunner$5(SpringApplication.java:789)
at org.springframework.util.function.ThrowingConsumer$1.acceptWithException(ThrowingConsumer.java:82)
at org.springframework.util.function.ThrowingConsumer.accept(ThrowingConsumer.java:60)
at org.springframework.util.function.ThrowingConsumer$1.accept(ThrowingConsumer.java:86)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:797)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:788)
at org.springframework.boot.SpringApplication.lambda$callRunners$3(SpringApplication.java:773)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:773)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:325)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351)
at de.adorsys.keycloak.config.KeycloakConfigApplication.main(KeycloakConfigApplication.java:34)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:102)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64)
at org.springframework.boot.loader.launch.PropertiesLauncher.main(PropertiesLauncher.java:580)
Caused by: java.lang.reflect.InvocationTargetException: null
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at com.oracle.truffle.runtime.ModulesSupport.loadModulesSupportLibrary(ModulesSupport.java:163)
... 66 common frames omitted
Caused by: java.nio.file.AccessDeniedException: /nonexistent
at java.base/sun.nio.fs.UnixException.translateToIOException(Unknown Source)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
at java.base/sun.nio.fs.UnixFileSystemProvider.createDirectory(Unknown Source)
at java.base/java.nio.file.Files.createDirectory(Unknown Source)
at java.base/java.nio.file.Files.createAndCheckIsDirectory(Unknown Source)
at java.base/java.nio.file.Files.createDirectories(Unknown Source)
at com.oracle.truffle.polyglot.InternalResourceCache.installResource(InternalResourceCache.java:233)
at com.oracle.truffle.polyglot.InternalResourceCache.installRuntimeResource(InternalResourceCache.java:190)
... 69 common frames omitted
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:102)
at org.springframework.boot.loader.launch.Launcher.launch(Launcher.java:64)
at org.springframework.boot.loader.launch.PropertiesLauncher.main(PropertiesLauncher.java:580)
Caused by: java.lang.IllegalStateException: java.lang.InternalError: java.lang.reflect.InvocationTargetException
at org.springframework.boot.SpringApplication.handleRunFailure(SpringApplication.java:824)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:328)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1362)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1351)
at de.adorsys.keycloak.config.KeycloakConfigApplication.main(KeycloakConfigApplication.java:34)
... 5 more
Caused by: java.lang.InternalError: java.lang.reflect.InvocationTargetException
at com.oracle.truffle.runtime.ModulesSupport.loadModulesSupportLibrary(ModulesSupport.java:170)
at com.oracle.truffle.runtime.ModulesSupport.(ModulesSupport.java:59)
at com.oracle.truffle.runtime.hotspot.HotSpotTruffleRuntimeAccess.createRuntime(HotSpotTruffleRuntimeAccess.java:84)
at com.oracle.truffle.runtime.hotspot.HotSpotTruffleRuntimeAccess.getRuntime(HotSpotTruffleRuntimeAccess.java:75)
at com.oracle.truffle.api.Truffle.createRuntime(Truffle.java:145)
at com.oracle.truffle.api.Truffle$1.run(Truffle.java:176)
at com.oracle.truffle.api.Truffle$1.run(Truffle.java:174)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at com.oracle.truffle.api.Truffle.initRuntime(Truffle.java:174)
at com.oracle.truffle.api.Truffle.(Truffle.java:63)
at com.oracle.truffle.runtime.enterprise.EnterpriseTruffle.supportsEnterpriseExtensions(stripped:22)
at com.oracle.truffle.polyglot.enterprise.EnterprisePolyglotImpl.getPriority(stripped:551)
at java.base/java.util.Comparator.lambda$comparing$77a9974f$1(Unknown Source)
at java.base/java.util.TimSort.countRunAndMakeAscending(Unknown Source)
at java.base/java.util.TimSort.sort(Unknown Source)
at java.base/java.util.Arrays.sort(Unknown Source)
at java.base/java.util.ArrayList.sort(Unknown Source)
at java.base/java.util.Collections.sort(Unknown Source)
at org.graalvm.polyglot.Engine.loadAndValidateProviders(Engine.java:1641)
at org.graalvm.polyglot.Engine$1.run(Engine.java:1717)
at org.graalvm.polyglot.Engine$1.run(Engine.java:1712)
at java.base/java.security.AccessController.doPrivileged(Unknown Source)
at org.graalvm.polyglot.Engine.initEngineImpl(Engine.java:1712)
at org.graalvm.polyglot.Engine$ImplHolder.(Engine.java:170)
at org.graalvm.polyglot.Engine.getImpl(Engine.java:422)
at org.graalvm.polyglot.Engine$Builder.build(Engine.java:724)
at org.graalvm.polyglot.Context$Builder.build(Context.java:1925)
at de.adorsys.keycloak.config.service.script.JavaScriptEvaluator.evaluate(JavaScriptEvaluator.java:36)
at de.adorsys.keycloak.config.provider.KeycloakImportProvider.evaluateScripts(KeycloakImportProvider.java:237)
at de.adorsys.keycloak.config.provider.KeycloakImportProvider.substituteImportResource(KeycloakImportProvider.java:216)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(Unknown Source)
at java.base/java.util.ArrayList.forEach(Unknown Source)
at java.base/java.util.stream.SortedOps$RefSortingSink.end(Unknown Source)
at java.base/java.util.stream.Sink$ChainedReference.end(Unknown Source)
at java.base/java.util.stream.Sink$ChainedReference.end(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)
at de.adorsys.keycloak.config.provider.KeycloakImportProvider.readFromLocations(KeycloakImportProvider.java:142)
at de.adorsys.keycloak.config.KeycloakConfigRunner.run(KeycloakConfigRunner.java:81)
at org.springframework.boot.SpringApplication.lambda$callRunner$5(SpringApplication.java:789)
at org.springframework.util.function.ThrowingConsumer$1.acceptWithException(ThrowingConsumer.java:82)
at org.springframework.util.function.ThrowingConsumer.accept(ThrowingConsumer.java:60)
at org.springframework.util.function.ThrowingConsumer$1.accept(ThrowingConsumer.java:86)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:797)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:788)
at org.springframework.boot.SpringApplication.lambda$callRunners$3(SpringApplication.java:773)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(Unknown Source)
at java.base/java.util.stream.SortedOps$SizedRefSortingSink.end(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(Unknown Source)
at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(Unknown Source)
at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)
at java.base/java.util.stream.ReferencePipeline.forEach(Unknown Source)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:773)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:325)
... 8 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at com.oracle.truffle.runtime.ModulesSupport.loadModulesSupportLibrary(ModulesSupport.java:163)
... 66 more
Caused by: java.nio.file.AccessDeniedException: /nonexistent
at java.base/sun.nio.fs.UnixException.translateToIOException(Unknown Source)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
at java.base/sun.nio.fs.UnixException.rethrowAsIOException(Unknown Source)
at java.base/sun.nio.fs.UnixFileSystemProvider.createDirectory(Unknown Source)
at java.base/java.nio.file.Files.createDirectory(Unknown Source)
at java.base/java.nio.file.Files.createAndCheckIsDirectory(Unknown Source)
at java.base/java.nio.file.Files.createDirectories(Unknown Source)
at com.oracle.truffle.polyglot.InternalResourceCache.installResource(InternalResourceCache.java:233)
at com.oracle.truffle.polyglot.InternalResourceCache.installRuntimeResource(InternalResourceCache.java:190)
... 69 more
```
### Anything else?
_No response_
贡献指南
评估
这个 Issue 还没有评估数据。