keycloak源码分析-启动

  1. web.xml
  2. WildflyLifecleListener
  3. KeycloakApplication
  4. KeycloakSessionServletFilter
  5. KeycloakTransactionCommitter
  6. RestEasyContext

分析版本: 10.0.0

web.xml

  1. module-nameauth,这就是为什么启动keyloak服务后要通过 http://domain/auth进行访问应用的原因了.

  2. 我们发现有一个load-on-startup的servlet声明,这个是restEasy的启动声明,详细请参考Older servlet containers.

WildflyLifecleListener

里面有个listener声明,实际上启动阶段这个listener什么都没做,到时容器关闭的时候,执行了一个shutdownHook.

KeycloakApplication

这个是keycloak启动的入口.

Created with Raphaël 2.2.0加载配置创建createSessionFactory并将实例加入servletContext当前keycloakApplication实例加入resteasyContext添加resource,filter,事务管理,异常处理和资源解析器执行启动hook,关联shutdownhook

这里的启动hook主要是做一些系统升级相关的逻辑.关联的shutdownhook主要是把之前创建的sessionFactory关掉. 这个shutdownhook实在上一节中提到的WildflyLifecleListener中调用的

启动过程中不管出现任何异常,keycloak都会直接exit.

KeycloakSessionServletFilter

目光再次回到web.xml上来,这里还有一个KeycloakSessionServletFilter,看一下里面的doFilter都做了什么:

SessionFactory和

Created with Raphaël 2.2.0设置请求编码为UTF-8从servletRequestContext中取出sessionFactory创建keycloakSession并push到ResteasyContext由request创建了一个ClientConnection对象并关联到sessionContext和push到resteasyContext从session获取事务管理器实例并push进resteasyContext,然后打开事务doFilter

这个filter负责创建session,并且打开事务,当出现异常的时候自动回滚事务.当没又出现异常的时候这个事务是如何提交的呢,继续往下分析.

KeycloakTransactionCommitter

在上面的KeycloakApplication的代码分析中有这么一句classes.add(KeycloakTransactionCommitter.class);看名字应该是做事务提交用的.

果真如此,但是它只负责在response阶段提交事务,如果提交事务出现异常的时候会直接将异常抛出,然后由KeycloakSessionServletFilter捕获后做回滚.

RestEasyContext

目前已经大该分析完了keycloak的启动过程,启动完成后restEasyContext中被push了下面这些对象,这些对象是可以直接通过注解进行注入的.

序号 类型 作用域 描述
1 KeycloakApplication gloable
2 KeycloakApplication thread for injection
3 KeycloakSession thread
4 ClientConnection thread
5 KeycloakTransaction thread

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wzslw@163.com

文章标题:keycloak源码分析-启动

文章字数:677

本文作者:武继明

发布时间:2020-05-09, 18:12:34

最后更新:2020-08-21, 06:30:57

原始链接:https://www.omingo.com/2020/05/09/keycloak源码分析-启动/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

0 条评论
未登录用户
Error: Not Found.
支持 Markdown 语法

来做第一个留言的人吧!

目录
  1. web.xml
  2. WildflyLifecleListener
  3. KeycloakApplication
  4. KeycloakSessionServletFilter
  5. KeycloakTransactionCommitter
  6. RestEasyContext
×

喜欢就点赞,疼爱就打赏