keycloak SPI 开发讲解

  • 目标

1.在keycloak3.4.0版本,实现对于用户登录登出事件记录

2.将用户登录的最近一次时间记录至用户属性表中

  • 需要掌握的知识点

1.keycloak SPI开发流程介绍,参考 keycloak 官网

2.java使用ServiceLoader加载服务

  • 具体执行方案

1.使用keycloak 提供的事件监听接口,完成对于用户登录登出的捕获

2.使用keycloak 提供的数据库操作接口,实现对于数据库的操作,包括向keycloak 添加自定义的数据表与操作keycloak已存在的表

  • 开发流程

1.创建普通maven工程

2.实现keyclaok的相关接口

a. 主要实现不同类型的ProviderFactory 类与 Provider 类,本范例主要实现的ProviderFactory 类包括 EventListenerProviderFactory【事件监听】JpaEntityProviderFactory【向keycloak添加自定义数据表】

 b.当完成服务开发后,提供我们的服务,我们需要在META-INF中添加services文件夹,然后在该文件夹中针对于每个实现的接口创建一个文件,文件名为服务接口的全限定类名,本范例实现了两个工厂类,那么这里完整的文件路径应为:

      META-INF/services/org.keycloak.connections.jpa.entityprovider.JpaEntityProviderFactory

      META-INF/services/org.keycloak.events.EventListenerProviderFactory

              最后需要在该每个文件中添加服务实现的全限定类名

3. 使用 maven 打肥包【参见注意事项内容】

4.将打出的jar包上传至keycloak 部署目录,路径如下:keycloak-3.4.0.Final/standalone/deployments

5.修改 standalone.xml 文件,文件路径:keycloak-3.4.0.Final/standalone/configuration ,添加需要向keycloak注册可使用                的的provider【本范例需要向keycloak注册的SPI接口为eventsListener,provider为logInfoRecord,该provider 的名字在                    EventListenerProviderFactory 实现类中进行定义】

6.登录keycloak管理界面,在导航栏选择“Events”,而后选择“Config”

选择需要注册服务【注:该服务名在 开发流程 步骤 5 配置】,完成服务在keycloak的注册

  

  • 注意事项

1.pom 文件依赖问题

方开发的插件需要打肥包,将依赖的JAR包打入运行的插件包中,但是需要去除keycloak中已经存在的jar包,主要包括

       keycloak-core,keycloak-services,keycloak-server-spi,keycloak-server-spi-private ,在POM 引用时,需要将使用范

          围设置为provided,范例如下

         
             org.keycloak
             keycloak-core
             3.4.0.Final
             provided
         

       若keycloak启动出现  xxxx not a subtype  ,一般为插件包中存在keycloak中已存在类,具体原因为使用不同的类加载器导致继承关系不存,因为服务器启动报 xxxx not a subtype 

2.打包插件相关

打包的maven插件使用 maven-assembly-plugin,可参考如下配置:


    
        
            org.apache.maven.plugins
            maven-compiler-plugin
            3.5.1
            
                1.8
                1.8
            
        
        
            org.apache.maven.plugins
             maven-assembly-plugin 
            
                
                    jar-with-dependencies
                
                
                    
                        
                    
                
            
            
                
                    make-assembly
                    package
                    
                        single
                    
                
            
        
    
    keycloak-spi

 

你可能感兴趣的:(keycloak SPI 开发讲解)