Keycloak集成Google Cloud Logging时出现IllegalAccessError等错误的解决
Keycloak 21.0.2集成google-cloud-logging时出现Protobuf相关权限及类初始化错误
在Keycloak 21.0.2的Quarkus运行时模块中添加3.15.11版本的google-cloud-logging依赖,尝试在QuarkusWelcomeResource类的isLocal()方法中实现写入Google Cloud Logging的逻辑,启动服务后抛出java.lang.IllegalAccessError、java.lang.NoClassDefFoundError等错误,报错指向com.google.protobuf相关类的访问权限问题及类初始化失败。
报错日志
2023-10-25 12:22:54,385 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (executor-thread-0) Uncaught server error: java.lang.IllegalAccessError: class com.google.logging.v2.LogBucket tried to access method 'com.google.protobuf.LazyStringArrayList com.google.protobuf.LazyStringArrayList.emptyList()' (com.google.logging.v2.LogBucket and com.google.protobuf.LazyStringArrayList are in unnamed module of loader io.quarkus.bootstrap.runner.RunnerClassLoader @2b9627bc) at com.google.logging.v2.LogBucket.<init>(LogBucket.java:400) ...(省略重复报错内容)
复现步骤
- 生成Service Account Key(JSON格式)
- 设置环境变量:
export GOOGLE_APPLICATION_CREDENTIALS=/path/to/my/key.json - 下载Keycloak 21.0.2开源版本
- 进入
quarkus/runtime目录 - 在pom.xml中添加依赖:
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-logging</artifactId> <version>3.15.11</version> </dependency>
- 在
src/main/java/org/keycloak/quarkus/runtime/services/resources/QuarkusWelcomeResource.java的isLocal()方法中添加日志写入逻辑 - 在
keycloak/quarkus目录执行mvn clean install -DskipTests编译项目 - 解压
keycloak/quarkus/dist/target/keycloak-21.0.2.tar.gz - 执行
keycloak-21.0.2/bin/kc.sh start-dev启动服务
内容的提问来源于stack exchange,提问作者MrP4sten
相关产品推荐
相关产品推荐

