项目结构

自定义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,然后你就可以在扩展它了,一般的步骤是:

  1. 建立新项目
  2. 依赖上面的SPI项目(它已经被注入到keycloak里,就像keycloak系统的spi)
  3. 将新的项目打包上传到/opt/jboss/keycloak/standalone/deployments目录完成自动化部署
  4. 在resources/META-INF/jboss-deployment-structure.xml里添加上面项目spi module

  5. 注册成功之后,在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的注入与扩展的更多相关文章

  1. 第四节:配置的读取、StartUp类、内置依赖注入和扩展改造

    一. 配置的读取 在Asp.Net Core中,有一个 appsettings.json 文件,用于存储相应的配置信息,读取的时,要通过构造函数注入:IConfiguration Configurat ...

  2. vue自定义指令clickoutside使用以及扩展用法

    vue自定义指令clickoutside使用以及扩展用法 产品使用vue+element作为前端框架.在功能开发过程中,难免遇到使用element的组件没办法满足特殊的业务需要,需要对其进行定制,例如 ...

  3. NetCore3.0实现自定义IOC容器注入

    在之前的ASP.NET MVC实现依赖注入一文中,通过替换默认的ControllerFactory来达到对Controller生命周期的拦截,实现自定义的对象注入,在NetCore3.0中需要重新实现 ...

  4. Web API 依赖注入与扩展

    与 MVC 类似, Web API 提供了System.Web.Http.Services.IDependencyResolver 接口来实现依赖注入, 我们可以很容易的用 Unity 来实现这个接口 ...

  5. keycloak~自定义rest接口

    rest资源 对于我们集成keycloak来说,你可能会遇到它没有实现的功能,这时需要对kc进行扩展,资源的扩展是其中一个方面,它需要实现RealmResourceProvider和RealmReso ...

  6. 【17MKH】我在框架中对.Net依赖注入的扩展

    说明 依赖注入(DI)是控制反转(IoC)的一种技术实现,它应该算是.Net中最核心,也是最基本的一个功能.但是官方只是实现了基本的功能和扩展方法,而我呢,在自己的框架 https://github. ...

  7. 注解【介绍、基本Annotation、元Anntation、自定义注解、注入基本信息、对象】

    什么是注解? 注解:Annotation-. 注解其实就是代码中的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相对应的处理. 为什么我们需要用到注解? 传统的方式,我们是通过配置文件(x ...

  8. 自定义JS类,并扩展其方法和属性

    function CT() { } CT.prototype.P = "TTT"; CT.Test = function () { alert(arguments[0]); }; ...

  9. springboot自定义类@Resource注入为null的问题

    最近用spring boot ,在controller外面即自定义的类里报错 java.lang.NullPointerException debug了下发现@Resource注入为null 查了不少 ...

随机推荐

  1. mysql有关配置

    mysql有关配置 mysql安装 mysql安装方式有三种 源代码:编译安装 二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用 程序包管理器管理的程序包: rpm:有两种 OS Vend ...

  2. gitlab的CI/CD实现

    环境准备: gitlab账号公网账号:代码仓库和编译器 目标机:装有docker和gitlab-runner环境的服务器(Linux或类unix机器,我使用的时centos 项目代码:testgola ...

  3. nginx 的三种虚拟主机配置方法

    nginx三种虚拟主机配置的方法. 基于端口 在生产环境中一般使用端口或者域名. [root@web01 /etc/nginx/conf.d]# cat web01.conf server { lis ...

  4. 30-- A 代码记录分析

    张的代码 30--  -A if(BT_INFO.RX.CACHE == BT_RX_CACHE[0]) { BT_INFO.RX.CACHE = BT_RX_CACHE[1]; } else { B ...

  5. 【长期更新】Ubuntu常用命令备忘录

    Error  Could not get lock /var/lib/dpkg/lock 出现这个问题可能是有另外一个程序正在运行,导致资源被锁不可用.而导致资源被锁的原因可能是上次运行安装或更新时没 ...

  6. 【JDK命令行 一】手动编译Java源码与执行字节码命令合集(含外部依赖引用)

    写作目标 记录常见的使用javac手动编译Java源码和java手动执行字节码的命令,一方面用于应对 Maven 和 Gradle 暂时无法使用的情况,临时生成class文件(使用自己的jar包):另 ...

  7. <fmt:formatDate> 标签,日期格式化问题(Day_24)

    一个时间显示问题,出生日期显示应为: yyyy-MM-dd,却显示: GMT格式(Wed Jun 15 00:00:00 CST 1983) 解决方案: 将图一改为图二. 图一: 图二: 最后: 注意 ...

  8. PyTorch 自动微分

    PyTorch 自动微分 autograd 包是 PyTorch 中所有神经网络的核心.首先简要地介绍,然后将会去训练的第一个神经网络.该 autograd 软件包为 Tensors 上的所有操作提供 ...

  9. 低层级GPU虚拟内存管理引论

    低层级GPU虚拟内存管理引论 Introducing Low-Level GPU Virtual Memory Management CUDA应用程序越来越需要尽可能快速高效地管理内存.在CUDA 1 ...

  10. 激光雷达Lidar Architecture and Lidar Design(下)

    Considerations on Lidar Design 双基地还是单基地? 双轴还是同轴? 几何重叠 向上还是向下看? 关心分散还是只关心时间? 发射器和接收器的波长 是否可调? 发射器和接收器 ...