zoukankan      html  css  js  c++  java
  • keycloak集成微信登陆~解决国内微信集成的问题

    之前看了国内写的微信集成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
    1

    二 版本包和版本

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

    你的程序不需要重启,它是支持热部署的!

  • 相关阅读:
    Maven 安装配置
    docker 安装 MySQL
    查看CentOS版本方法
    JavaScript定时器的开启关闭
    JavaScript实现延时提示框
    JavaScript获取当前时间
    JavaScript实现数字时钟功能
    JavaScript获取非行间样式
    JavaScript数组的操作
    JavaScript数组和json的区别
  • 原文地址:https://www.cnblogs.com/lori/p/14274547.html
Copyright © 2011-2022 走看看