cml*_*der 8 jboss wildfly keycloak
我有一个 SPI 实现,它是:
1) EAR 部署:我尝试了 EAR 部署并将我的 .ear 部署到 /standalone/deployments。这解决了捆绑在 EAR 的 lib 文件夹中的外部 jar 问题。但是现在 SPI 没有初始化(我在调试时看到了这一点),并且当我触发 SPI 时也出现异常:
11:34:02,185 INFO [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: Keycloak 9.0.2 (WildFly Core 10.0.3.Final) started in 12070ms - Started 732 of 1031 services (613 services are lazy, passive or on-demand)
11:34:18,209 ERROR [org.keycloak.services.error.KeycloakErrorHandler] (default task-1) Uncaught server error: java.lang.NullPointerException
at org.keycloak.keycloak-services@9.0.2//org.keycloak.services.DefaultKeycloakSessionFactory.getAllProviderIds(DefaultKeycloakSessionFactory.java:362)
Run Code Online (Sandbox Code Playgroud)
然后我想也许 keycloak 无法通过独立/部署部署导入扩展 SPI,如果您开发自定义 SPI keycloak 建议(或需要?)模块部署,这里也会提到这一点。
2)然后我尝试了模块部署;现在我可以看到我的自定义 SPI 正在初始化,但是现在 keycloak 找不到我的外部 JAR。
13:17:05,682 FATAL [org.keycloak.services] (ServerService Thread Pool -- 65) java.lang.RuntimeException: org.jboss.modules.ModuleNotFoundException: com.orbitz.consul
Run Code Online (Sandbox Code Playgroud)
作为解决方案,我找到了可以将我的依赖 jar 及其所有依赖 jar 放到${KEYCLOAK_HOME}\modules\system\layers\keycloak 的某个地方,但我不想将我的外部 JAR 及其所有依赖项手动安装到 keycloak 的基地(也许会自动以某种方式?)。有什么解决办法吗?
部署为模块的脚本:
./jboss-cli.bat --command="module add --name=de.easy.one.bouncer.spi.registry --resources=target/registry-spi-1.0.1-SNAPSHOT.jar --dependencies=org.keycloak.keycloak-core,org.keycloak.keycloak-services,org.keycloak.keycloak-server-spi,org.keycloak.keycloak-server-spi-private,javax.api,javax.ws.rs.api,com.fasterxml.jackson.core.jackson-core,com.fasterxml.jackson.core.jackson-databind,com.fasterxml.jackson.core.jackson-annotations,org.jboss.logging,com.orbitz.consul"
Run Code Online (Sandbox Code Playgroud)
并将其添加到 standalone.xml 中,如下所示:
<provider>module:de.easy.one.bouncer.spi.registry</provider>
Run Code Online (Sandbox Code Playgroud)
META-INF/服务
文件名 --> 文件内容
org.keycloak.provider.Spi --> de.easy.one.bouncer.spi.registry.spi.RegistryProviderSpi
de.easy.one.bouncer.spi.registry.spi.RegistryProviderFactory --> de.easy.one.bouncer.spi.registry.consul.ConsulRegistryProviderFactory
我的 pom.xml
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-server-spi-private</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-services</artifactId>
<scope>provided</scope>
</dependency>
<!-- this is not provided and I want to use as external jar -->
<dependency>
<groupId>com.orbitz.consul</groupId>
<artifactId>consul-client</artifactId>
<version>1.4.2</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
尝试创建一个 UBER JAR 包,其中包含所有未提供的依赖项
pom.xml:
<properties>
<uber-jar.name>${project.artifactId}</uber-jar.name>
<shade.plugin.version>3.2.1</shade.plugin.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>${shade.plugin.version}</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>${uber-jar.name}</finalName>
<filters>
<filter>
<artifact>*:*</artifact>
<!-- Anti-`Invalid signature file digest` -->
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1470 次 |
| 最近记录: |