keycloak集成微信登錄~解決國內微信集成的問題

以前看了國內寫的微信集成keycloak的文章,而後拿來就用了,但個人是jboss部署的keycloak,而後使用他的包以後,會出現類沒法找到的問題,以後找了不少資料,多數都是國外的,在今天終於找到了解決這個問題的方法,首先你用shade,assemble去打包,把缺乏的包打進來,這種方案是不行的,由於人家部署的項目裏已經有你這些keyclock包了,因此會出現不一樣classload裝載相同類的狀況,結果就是出現not a subtype的問題。html

總結

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

一 須要向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
1github

二 版本包和版本

你的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

相關文章
相關標籤/搜索