keycloak整合微信登陸~解決國內微信整合的問題
2021-01-13 21:30:09 軟體

之前看了國內寫的微信整合keycloak的文章,然後拿來就用了,但我的是jboss部署的keycloak,然後使用他的包之後,會出現類無法找到的問題,之後找了很多資料,多數都是國外的,在今天終於找到了解決這個問題的方法,首先你用shade,assemble去打包,把缺少的包打進來,這種方案是不行的,因為人家部署的專案裡已經有你這些keyclock包了,所以會出現不同classload裝載相同類的情況,結果就是出現not a subtype的問題。

總結

參考:https://stackoverflow.com/questions/57778240/noclassdeffounderror-in-a-provider-jar-when-using-a-class-from-org-keycloak-auth

一 需要向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 

你的程式不需要重啟,它是支援熱部署的!