keycloak~自定義的SPI擴展
項目結(jié)構(gòu)

自定義SPI注冊
1. 直接復制文件方式
docker cp keycloak-service-self-spi.jar keycloak:/opt/docker cp module-one-add.cli keycloak:/opt/docker exec -it keycloak bash
$JBOSS_HOME/bin/jboss-cli.sh --file=/opt/module-one-add.cli
使用docker commit保存你當前容器為一個新的鏡像,然后啟動它即可
2. 打包鏡像方式
Dockerfile
FROM jboss/keycloak:11.0.3USER root
#self provider
WORKDIR /opt
COPY target/keycloak-service-self-spi.jar .RUN mkdir cli
COPY module-one-add.cli cli/RUN $JBOSS_HOME/bin/jboss-cli.sh --file=cli/module-one-add.cli
RUN rm -rf $JBOSS_HOME/standalone/configuration/standalone_xml_history/current
打包
docker build -t self/keycloak .
后續(xù)的擴展
當有了自己的SPI接口之后,它也有了對應的ProviderFactory和Provider,然后你就可以在擴展它了,一般的步驟是:
建立新項目
依賴上面的SPI項目(它已經(jīng)被注入到keycloak里,就像keycloak系統(tǒng)的spi)
將新的項目打包上傳到
/opt/jboss/keycloak/standalone/deployments
目錄完成自動化部署在resources/META-INF/jboss-deployment-structure.xml里添加上面項目spi module

注冊成功之后,在keycloak管理平臺的server-info/providers里會有體現(xiàn)

module-one-add.cli
# main provider
module add --name=keycloak-service-self-spi --resources=/opt/keycloak-service-self-spi.jar --dependencies=org.keycloak.keycloak-core,org.keycloak.keycloak-common,org.hibernate,org.keycloak.keycloak-server-spi,org.keycloak.keycloak-server-spi-private,org.keycloak.keycloak-services,org.keycloak.keycloak-model-jpa,org.jboss.logging,javax.api,javax.ws.rs.api,javax.transaction.api,javax.persistence.api,org.jboss.resteasy.resteasy-jaxrs,org.apache.httpcomponents,org.apache.commons.lang,javax.xml.bind.api,com.squareup.okhttp3
embed-server --server-config=standalone-ha.xml --std-out=echo
batch
?
# main provider
/subsystem=keycloak-server:list-add(name=providers,value=module:keycloak-service-self-spi)
/subsystem=keycloak-server/spi=SelfProviderFactory/:add
/subsystem=keycloak-server/spi=SelfProvider/provider=defaultselfprovider/:add(enabled=true)
run-batch
stop-embedded-server
embed-server --server-config=standalone.xml --std-out=echo
batch
# main provider
/subsystem=keycloak-server:list-add(name=providers,value=module:keycloak-phone-provider)
/subsystem=keycloak-server/spi=SelfProviderFactory/:add
/subsystem=keycloak-server/spi=SelfProvider/provider=defaultselfprovider/:add(enabled=true)
run-batch
stop-embedded-server