Keycloak 不接受/任何自定义 LoginFormsProviders

问题描述 投票:0回答:1

我正在使用 Keycloak 25,我正在尝试通过 keycloak SPI 修改/扩展/替换 FreeMarkerLoginFormsProvider。我尝试过使用针对几个不同问题提供的方法。 就像这里的这个:keycloak 自定义登录提供程序未在版本 19 中调用,但未成功。我仍然收到错误:

ERROR [org.keycloak.services.error.KeycloakErrorHandler] (executor-thread-14) Uncaught server error: java.lang.NullPointerException: Cannot invoke "org.keycloak.forms.login.LoginFormsProvider.setAuthenticationSession(org.keycloak.sessions.AuthenticationSessionModel)" because the return value of "org.keycloak.models.KeycloakSession.getProvider(java.lang.Class)" is null.
这是我的代码:

public class CustomLoginFormsProvider extends FreeMarkerLoginFormsProvider { private static final Logger logger = Logger.getLogger(CustomLoginFormsProvider.class); public CustomLoginFormsProvider(KeycloakSession session) { super(session); logger.info("Injecting custom login forms provider!"); } }

public class CustomLoginFormsProviderFactory extends FreeMarkerLoginFormsProviderFactory { public static final String PROVIDER_ID = "custom-login-provider"; @Override public LoginFormsProvider create(KeycloakSession session) { return new CustomLoginFormsProvider(session); } @Override public String getId() { return PROVIDER_ID; } }
我已经在 META-INF org.keycloak.forms.login.LoginFormsProviderFactory 中创建了一个文件,其中包含我的自定义类。
我还用 

--spi-login-provider=custom-login-provider

 
--spi-login-custom-login-provider-enabled=true
 启动服务器
我还尝试复制整个类并分别实现 
LoginFormsProviderLoginFormsProviderFactory 类。

keycloak 不再支持此功能吗? 如何解决NULL指针问题?

编辑:在头撞了一段时间后,我交叉发布了这个问题

here

目前它也不包含解决方案,但将来可能会包含解决方案。您可以在我的回答中找到问题的解决方法。

java authentication keycloak keycloak-services
1个回答
0
投票
可悲的是,我必须回答我自己的问题,如果其他人发现自己处于与我相同的情况,我会回答。

Keycloak 的逻辑决定了必须按以下顺序加载的提供程序的顺序:

    显式配置的默认提供程序
  1. 订单最高的提供商。(0
  2. <= are ignored).
  3. id 设置为默认的提供商。
这意味着作为解决方法:

@Override public int order() { return 1; }
必须以最高优先级显式指定订购方法。

© www.soinside.com 2019 - 2024. All rights reserved.