java - 无需重新编译整个项目即可修改 Keycloak 源代码

标签 java cryptography keycloak

我正在尝试通过自定义 SPI 向 Keycloak 添加一些后量子算法,为此,我需要使用我的代码从 Keycloak 修改一些核心类(主要是 Provider 类),以便系统识别新算法。

不幸的是,重新编译 Keycloak 是一项繁重的工作(需要花费大量时间),因此在开发时修改核心文件会使运行测试和其他东西变得不切实际。

我一直在研究 Keycloak 源文件并注意到我需要修改的提供程序(显然) 没有实现 ProviderFactory 接口(interface),所以(我想想)不可能用 SPI 方法修改这些文件。

我的问题是:是否可以在不重新编译整个 Keycloak 的情况下修改此类?我可以使用自定义 SPI 来解决这些问题吗?我应该尝试其他解决方案吗? (我有点没主意了)

顺便说一句,我需要修改的类之一是 BCPemUtilsProvider,我想做这样的事情:

    @Override
    protected String encode(Object obj) {
        if (obj == null) {
            return null;
        }

        try {
            StringWriter writer = new StringWriter();
            JcaPEMWriter pemWriter = new JcaPEMWriter(writer);

            /** 
             * MY CODE GOES HERE...
             */

            pemWriter.writeObject(obj);
            pemWriter.flush();
            pemWriter.close();
            String s = writer.toString();
            return removeBeginEnd(s);
        } catch (Exception e) {
            throw new PemException(e);
        }
    }

最佳答案

我假设您有一份最终部署在某个服务器上的源代码副本。

如果是...

大多数 IDE 允许在调试 session 期间使用 JPDA、GDB 或其他任何工具进行热代码替换。

我使用 JPDA 连接到已部署的耳朵并添加一些代码,而无需编译、构建、重新部署等。

从技术上讲,它的作用是在服务器容器中托管的 jvm 上打开一个调试 session 。

显然,如果需要,您需要在服务器上启用 jvm 调试,并通过 socketAttach 或与您的设置兼容的任何方式附加调试器。

当您热替换代码时,您的 IDE 会上传一些代码并命令远程 jvm 重新编译不同的类,而不是将整个项目重新部署到服务器容器中。

如果您这样做,请记住最好的做法是(使用最新更改进行部署)- 最后上传您更改的所有内容,因为它是一个调试 API ...而且通常情况下,这取决于您如何处理它,它可能会或可能不会开始出现不可预测的行为。

关于java - 无需重新编译整个项目即可修改 Keycloak 源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73547002/

相关文章:

java - openAssetFileDescriptor 不会截断 OneDrive 文件

java - 我可以使用/调用在大括号内、大括号外创建的结果集或准备好的语句对象吗?

java - 私有(private)方法内联

SpringBoot 作为 WAR 不会加载/初始化 Keycloak 的 Spring Config

java - 我有一个将字符串常量作为参数的 java 注释,如何将字符串变量传递给它?

php - 在android(客户端)中加密密码并使用rsa在服务器端PHP中解密

C# BouncyCaSTLe - 使用公钥/私钥的 RSA 加密

encryption - 如何使用 PyCrypto 读取标准的 openssl rsa 私钥并用它解密

keycloak - 无法从 json 文件创建复合角色

java - 创建 keycloak 客户端并以编程方式从其他客户端分配角色