克隆Keycloak源码
git clone git@github.com:keycloak/keycloak.git
Build项目
mvn clean install -Pdistribution -DskipTests=True
Keycloak包会编译到distribution中,在server-dist/target/keycloak-会找到一个wildfly结构的keycloak server。
Build出的包直接启动会报moudule keycloak-server-subsystem not found,需要在/keycloak-xxx/modules/目录下创建layers.conf文件,文件内容为:
layers=keycloak
修改Keycloak数据库,以Postgresql为例:
a. 在keycloak-/modules/system/layers/base/org/下创建文件夹postgresql,在postgresql下创建文件夹main。
b. 到maven库下载postgresql对应版本的驱动,比如https://mvnrepository.com/artifact/org.postgresql/postgresql/9.4.1212 ,放到main目录下。
c. 在main目录下创建module.xml文件,内容为:
1 2 3 4 5 6 7 8 9 10 11 <?xml version="1.0" encoding="UTF-8" ?> <module xmlns ="urn:jboss:module:1.3" name ="org.postgresql" > <resources > <resource-root path ="postgresql-9.4-1212.jar" /> </resources > <dependencies > <module name ="javax.api" /> <module name ="javax.transaction.api" /> </dependencies > </module >
d. 编辑keycloak-/standalone/configuration/standalone.xml文件,更改数据库:
找到<subsystem xmlns="urn:jboss:domain:datasources:5.0">
,将datasources替换为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 <datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true"> <connection-url>jdbc:postgresql://127.0.0.1:5432/keycloak_ExampleDS</connection-url> <driver>postgresql</driver> <pool> <min-pool-size>10</min-pool-size> <max-pool-size>20</max-pool-size> <prefill>false</prefill> <use-strict-min>false</use-strict-min> <flush-strategy>FailingConnectionOnly</flush-strategy> </pool> <security> <user-name>postgres</user-name> <password>369</password> </security> <validation> <check-valid-connection-sql>SELECT 1</check-valid-connection-sql> <validate-on-match>false</validate-on-match> <background-validation>false</background-validation> <use-fast-fail>false</use-fast-fail> </validation> </datasource> <datasource jndi-name="java:jboss/datasources/KeycloakDS" pool-name="KeycloakDS" enabled="true" use-java-context="true"> <connection-url>jdbc:postgresql://127.0.0.1:5432/keycloak</connection-url> <driver>postgresql</driver> <pool> <min-pool-size>10</min-pool-size> <max-pool-size>20</max-pool-size> <prefill>false</prefill> <use-strict-min>false</use-strict-min> <flush-strategy>FailingConnectionOnly</flush-strategy> </pool> <security> <user-name>postgres</user-name> <password>369</password> </security> <validation> <check-valid-connection-sql>SELECT 1</check-valid-connection-sql> <validate-on-match>false</validate-on-match> <background-validation>false</background-validation> <use-fast-fail>false</use-fast-fail> </validation> </datasource> <drivers> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> <driver name="postgresql" module="org.postgresql"> <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class> </driver> </drivers> </datasources>
其中connection-url改为相应的server和数据库。
5. 至此,配置完成,进入keycloak-/bin/,启动 standalone.sh (.bat)即可访问http://localhost:8080/auth 。
如果在启动时出现
1 2 3 4 5 6 Caused by: org.jboss .modules .ModuleNotFoundException : org.keycloak .keycloak-server-subsystem at org.jboss .modules .ModuleLoader .loadModule (ModuleLoader.java :294 ) at org.jboss .modules .ModuleLoader .loadModule (ModuleLoader.java :280 ) at org.jboss .as .controller .parsing .DeferredExtensionContext .loadModule (DeferredExtensionContext.java :111 ) ... 10 more
问题,参考Stackoverflow解答 ,需要在keycloak-/modules/目录下创建文件layers.conf,内容如下:
下面有人解释说:这样做是在wildfly中开启keycloak subsystem模块。否则所有的keycloak类都无法被加载。这个文件在编译时没有被拷贝,很是奇怪。