以前看了國內寫的微信集成keycloak的文章,而後拿來就用了,但個人是jboss部署的keycloak,而後使用他的包以後,會出現類沒法找到的問題,以後找了不少資料,多數都是國外的,在今天終於找到了解決這個問題的方法,首先你用shade,assemble去打包,把缺乏的包打進來,這種方案是不行的,由於人家部署的項目裏已經有你這些keyclock包了,因此會出現不一樣classload裝載相同類的狀況,結果就是出現not a subtype
的問題。html
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifestEntries> <Dependencies>org.keycloak.keycloak-services</Dependencies> </manifestEntries> </archive> </configuration> </plugin>
生成的META-INF/MANIFEST.MF
github
你的weixin裏使用的keycloak應該和服務端的版本相同,由於你的包也是要被部署到人家的服務器的,我和服務器用的是11.0.2docker
<dependencies> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-core</artifactId> <scope>provided</scope> <version>${keycloak.version}</version> </dependency> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-server-spi</artifactId> <scope>provided</scope> <version>${keycloak.version}</version> </dependency> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-server-spi-private</artifactId> <scope>provided</scope> <version>${keycloak.version}</version> </dependency> <dependency> <groupId>org.keycloak</groupId> <artifactId>keycloak-services</artifactId> <scope>provided</scope> <version>${keycloak.version}</version> </dependency> </dependencies>
具體代碼能夠仿照他的github實現 方式apache
public class WeiXinIdentityProvider extends AbstractOAuth2IdentityProvider<OAuth2IdentityProviderConfig> implements SocialIdentityProvider<OAuth2IdentityProviderConfig> {} public class WeiXinIdentityProviderFactory extends AbstractIdentityProviderFactory<WeiXinIdentityProvider> implements SocialIdentityProviderFactory<WeiXinIdentityProvider> {}
META-INF.services裏添加文件org.keycloak.broker.social.SocialIdentityProviderFactory,它的內容以下,內容就是它的一個實現類,一個工廠類服務器
com.test.weixin.WeiXinIdentityProviderFactory
jboss/keycloak的部署插件目錄是/opt/jboss/keycloak/standalone/deployments
微信
docker cp ./keycloak-services-social-weixin.jar keycloak:/opt/jboss/keycloak/standalone/deployments && docker cp ./templates/realm-identity-provider-weixin.html keycloak:/opt/jboss/keycloak/themes/base/admin/resources/partials && docker cp ./templates/realm-identity-provider-weixin-ext.html keycloak:/opt/jboss/keycloak/themes/base/admin/resources/partials
你的程序不須要重啓,它是支持熱部署的!maven