Jboss KeyClope自定义验证输出消息

Jboss KeyClope自定义验证输出消息,jboss,output,single-sign-on,message,keycloak,Jboss,Output,Single Sign On,Message,Keycloak,我使用的是JBossKey斗篷1.5最终版本。 我开发了我的自定义用户联合提供程序,它与KeyClope属性和我的用户企业数据库接口 我需要向用户发送登录界面自定义错误消息,该消息基于与遗留用户数据库相关的特定错误 我看到KeyClope主题有一个resources文件夹,通过它我可以本地化并添加新消息。然后我可以使用 $myMessage 符号。问题是我想从KeyClope服务器上弹出一条消息。我的用户联合提供程序实现UserFederationProvider接口。因此,我必须覆盖: @O

我使用的是JBossKey斗篷1.5最终版本。 我开发了我的自定义用户联合提供程序,它与KeyClope属性和我的用户企业数据库接口

我需要向用户发送登录界面自定义错误消息,该消息基于与遗留用户数据库相关的特定错误

我看到KeyClope主题有一个resources文件夹,通过它我可以本地化并添加新消息。然后我可以使用

$myMessage
符号。问题是我想从KeyClope服务器上弹出一条消息。我的用户联合提供程序实现UserFederationProvider接口。因此,我必须覆盖:

@Override
public CredentialValidationOutput validCredentials(RealmModel realm, UserCredentialModel credential) {
    LOGGER.info("validCredentials(realm, credential)");
    return CredentialValidationOutput.failed();
}
这似乎是我一直在寻找的方法,因为CredentialValidationOutput包含要作为验证输出发送的自定义消息。问题是这个方法永远不会被调用


为什么?

我会把自己找到的答案贴出来

有必要开发自己的验证器。例如,请参阅keydape UsernameAndForm和UsernameAndFormFactory实现

您可以在KeyClope github源代码中找到它们:

主要验证方法有:

public boolean validateUserAndPassword(AuthenticationFlowContext context, MultivaluedMap<String, String> inputData) {

    ...

}

 public boolean validatePassword(AuthenticationFlowContext context, UserModel user, MultivaluedMap<String, String> inputData) {

    ...

}
当然,在您的项目中,您必须添加

META-INF/service/org.keycloak.authentication.AuthenticatorFactory
在其中指定验证器工厂的完整限定名称


有关有效的指南,请参考KeyClope用户指南1.6.1 Final。第33.3章

这不再起作用:
未捕获的服务器错误:java.lang.NoSuchMethodError:'javax.ws.rs.core.Response org.keydeport.forms.login.login-formsProvider.createLogin()'
META-INF/service/org.keycloak.authentication.AuthenticatorFactory