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

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

最新文章

  1. R自动数据收集第一章概述——《List of World Heritage in Danger》
  2. package
  3. eclipse 运行报java.lang.OutOfMemoryError: PermGen space解决方法
  4. [AaronYang]C#人爱学不学[7]
  5. 微信企业号办公系统-JSSDK上传图片(多图上传)
  6. node中定时器的“先进”用法
  7. 关于版本号:alpha、beta、rc、stable
  8. 常量折叠 const folding
  9. 解决 Unable to load DLL &#39;OraOps9.dll&#39;: 找不到指定的模块。 (Exception from HRESULT: 0x8007007E)
  10. 第一个CUDA程序
  11. ajax请求在ie8下缓存问题
  12. gevent拾遗
  13. numpy的基础运算-【老鱼学numpy】
  14. window7 32位部署django
  15. 使用开源项目xutils3完成下载
  16. 通过pycharm将代码push到远程仓库
  17. C++ vector和list的主要用法区别
  18. vue-列表嵌套
  19. react 字符串强转为html标签
  20. react性能检测与优化

热门文章

  1. Springcloud之gateway配置及swagger集成
  2. 换种思路写Mock,让单元测试更简单
  3. 【题解】HDU4625 JZPTREE
  4. 四、git学习之——远程仓库
  5. 谷歌浏览器debugger技巧
  6. SpringBoot+Redis相关配置文件
  7. js实现转盘抽奖
  8. STL——容器(Map &amp; multimap)的插入与迭代器
  9. Docker部署Portainer搭建轻量级可视化管理UI
  10. js下 Day09、事件(二)