之前看了國內寫的微信整合keycloak的文章,然後拿來就用了,但我的是jboss部署的keycloak,然後使用他的包之後,會出現類無法找到的問題,之後找了很多資料,多數都是國外的,在今天終於找到了解決這個問題的方法,首先你用shade,assemble去打包,把缺少的包打進來,這種方案是不行的,因為人家部署的專案裡已經有你這些keyclock包了,所以會出現不同classload裝載相同類的情況,結果就是出現not a subtype
的問題。
總結
一 需要向MANIFEST.MF裡注入依賴包
<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
二 版本包和版本
你的weixin裡使用的keycloak應該和服務端的版本相同,因為你的包也是要被部署到人家的伺服器的,我和伺服器用的是11.0.2
<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實現 方式
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
你的程式不需要重啟,它是支援熱部署的!