keycloak源码分析-启动
分析版本: 10.0.0
web.xml

module-name
为auth,这就是为什么启动keyloak服务后要通过 http://domain/auth进行访问应用的原因了.我们发现有一个
load-on-startup
的servlet声明,这个是restEasy的启动声明,详细请参考Older servlet containers.
WildflyLifecleListener
里面有个listener
声明,实际上启动阶段这个listener什么都没做,到时容器关闭的时候,执行了一个shutdownHook.

KeycloakApplication
这个是keycloak启动的入口.
这里的启动hook主要是做一些系统升级相关的逻辑.关联的shutdownhook主要是把之前创建的sessionFactory关掉. 这个shutdownhook实在上一节中提到的WildflyLifecleListener
中调用的
启动过程中不管出现任何异常,keycloak都会直接exit.
KeycloakSessionServletFilter
目光再次回到web.xml
上来,这里还有一个KeycloakSessionServletFilter
,看一下里面的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" 转载请保留原文链接及作者。
来做第一个留言的人吧!