之前看了国内写的微信集成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你的程序不需要重启,它是支持热部署的!