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里注入依赖包

  
        org.apache.maven.plugins
        maven-jar-plugin
        
            
                
                    org.keycloak.keycloak-services
                
            
        
    

生成的META-INF/MANIFEST.MF

二 版本包和版本

你的weixin里使用的keycloak应该和服务端的版本相同,因为你的包也是要被部署到人家的服务器的,我和服务器用的是11.0.2

 
        
            org.keycloak
            keycloak-core
            provided
            ${keycloak.version}
        
        
            org.keycloak
            keycloak-server-spi
            provided
            ${keycloak.version}
        
        
            org.keycloak
            keycloak-server-spi-private
            provided
            ${keycloak.version}
        
        
            org.keycloak
            keycloak-services
            provided
            ${keycloak.version}
        

三 两个类,一个配置

具体代码可以仿照他的github实现 方式

public class WeiXinIdentityProvider extends AbstractOAuth2IdentityProvider
        implements SocialIdentityProvider {}

public class WeiXinIdentityProviderFactory extends AbstractIdentityProviderFactory
        implements SocialIdentityProviderFactory {}

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 

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