keycloak~自定义SPI的注入与扩展
项目结构

自定义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.3
USER 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 .
后续的扩展
当有了自己的SPI接口之后,它也有了对应的ProviderFactory和Provider,然后你就可以在扩展它了,一般的步骤是:
- 建立新项目
- 依赖上面的SPI项目(它已经被注入到keycloak里,就像keycloak系统的spi)
- 将新的项目打包上传到
/opt/jboss/keycloak/standalone/deployments目录完成自动化部署 - 在resources/META-INF/jboss-deployment-structure.xml里添加上面项目spi module

- 注册成功之后,在keycloak管理平台的server-info/providers里会有体现

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
keycloak~自定义SPI的注入与扩展的更多相关文章
- 第四节:配置的读取、StartUp类、内置依赖注入和扩展改造
一. 配置的读取 在Asp.Net Core中,有一个 appsettings.json 文件,用于存储相应的配置信息,读取的时,要通过构造函数注入:IConfiguration Configurat ...
- vue自定义指令clickoutside使用以及扩展用法
vue自定义指令clickoutside使用以及扩展用法 产品使用vue+element作为前端框架.在功能开发过程中,难免遇到使用element的组件没办法满足特殊的业务需要,需要对其进行定制,例如 ...
- NetCore3.0实现自定义IOC容器注入
在之前的ASP.NET MVC实现依赖注入一文中,通过替换默认的ControllerFactory来达到对Controller生命周期的拦截,实现自定义的对象注入,在NetCore3.0中需要重新实现 ...
- Web API 依赖注入与扩展
与 MVC 类似, Web API 提供了System.Web.Http.Services.IDependencyResolver 接口来实现依赖注入, 我们可以很容易的用 Unity 来实现这个接口 ...
- keycloak~自定义rest接口
rest资源 对于我们集成keycloak来说,你可能会遇到它没有实现的功能,这时需要对kc进行扩展,资源的扩展是其中一个方面,它需要实现RealmResourceProvider和RealmReso ...
- 【17MKH】我在框架中对.Net依赖注入的扩展
说明 依赖注入(DI)是控制反转(IoC)的一种技术实现,它应该算是.Net中最核心,也是最基本的一个功能.但是官方只是实现了基本的功能和扩展方法,而我呢,在自己的框架 https://github. ...
- 注解【介绍、基本Annotation、元Anntation、自定义注解、注入基本信息、对象】
什么是注解? 注解:Annotation-. 注解其实就是代码中的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相对应的处理. 为什么我们需要用到注解? 传统的方式,我们是通过配置文件(x ...
- 自定义JS类,并扩展其方法和属性
function CT() { } CT.prototype.P = "TTT"; CT.Test = function () { alert(arguments[0]); }; ...
- springboot自定义类@Resource注入为null的问题
最近用spring boot ,在controller外面即自定义的类里报错 java.lang.NullPointerException debug了下发现@Resource注入为null 查了不少 ...
随机推荐
- Pulsar 下一代消息平台
引言 提起成熟的消息队列或消息引擎,毋庸置疑,大多数人的第一反应一定是 Kafka. Kafka 能够彻底满足海量数据场景下高吞吐.高并发需求,在短短几年内,已经被阿里.腾讯.百度.字节跳动.Netf ...
- 怎样使用yum-cron为CentOS7自动更新重要的安全补丁
怎样使用yum-cron为CentOS自动更新重要的安全补丁 2017年4月19日 | 分类: [技术] 参考:https://linux.die.net/man/8/yum-cron参考:http: ...
- Scala 函数式编程思想
Spark 选择 Scala 作为开发语言 在 Spark 诞生之初,就有人诟病为什么 AMP 实验室选了一个如此小众的语言 - Scala,很多人还将原因归结为学院派的高冷,但后来事实证明,选择 S ...
- Java 常量值的数据类型
Java 常量值(也叫字面量)和变量一样,也是有数据类型的. 经常有面试题考察你对 Java 常量值数据类型的理解,如下: float a = 3.3; 问你这一行代码是否正确?答案肯定是不正确.为什 ...
- python3 读取txt文件数据,绘制趋势图,matplotlib模块
python3 读取txt文件数据,绘制趋势图 test1.txt内容如下: 时间/min cpu使用率/% 内存使用率/% 01/12-17:06 0.01 7.61 01/12-17:07 0.0 ...
- PHP常用函数记录
1.mixed print_r(mixed $expression [,bool $return=false ]) 打印变量信息. 相关的函数还有var_dump().var_export() $re ...
- golang快速入门(五)初尝web服务
提示:本系列文章适合对Go有持续冲动的读者 初探golang web服务 golang web开发是其一项重要且有竞争力的应用,本小结来看看再golang中怎么创建一个简单的web服务. 在不适用we ...
- 灵动微电子ARM Cortex M0 MM32F0010 GPIO 的配置驱动LED灯
灵动微电子ARM Cortex M0 MM32F0010 GPIO的配置 目录: 1.前言 2.学习方法简要说明 3.要点提示 4.注意事项 5.MM32F0010系统时钟的配置 6.MM32F001 ...
- Django settings 描述
""" Django settings for log_collect_statistics project. Generated by 'django-admin st ...
- TVM将深度学习模型编译为WebGL
使用TVM将深度学习模型编译为WebGL TVM带有全新的OpenGL / WebGL后端! OpenGL / WebGL后端 TVM已经瞄准了涵盖各种平台的大量后端:CPU,GPU,移动设备等.这次 ...