当前位置: 首页 > 知识库问答 >
问题:

部署自定义SPI(FreeMarkerLoginFormsProvider)时出现问题

白哲茂
2023-03-14

故事

我用的是keycloak 6.0.1。我有一个领域有两种类型的用户:管理员和常规用户。我需要一个主题,可以区分他们之间,因为登录是不同的(3字段vs 2字段)。因此,我希望扩展提供程序FreeMarkerLoginFormsProvider以传递一个自定义参数。我正在使用keycloak部署器部署我的SPI。

Keycloak在部署时不幸引发异常:

我也尝试过模块方法,但得到一个NullPointerException:

09:23:09,394错误[org.keycloak.services.ERROR.keycloakerrorhandler](默认任务-1)未捕获的服务器错误:java.lang.NullPointerException在org.keycloak.keycloak-services@6.0.1//org.keycloak.protocol.authorizationEndpointbase.createAuthenticationSession(authorizationEndpointbase.java:193)在org.keycloak.keycloak-services@6.0.1//org.keycloak.protocol.oidc.Endpoints.authorizationEndpoints.authorizationEndpoints.authorizationEndpoints.process(authorizationEndpoint.buildGet(authorizationEndpoint.java:108)在java.base/jdk.internal.reflect.nativeMethodAccessorImpl.Invoke0(原生方法)在java.base/jdk.internal.reflect.nativeMethodAccessorImpl.Invoke(nativeMethodAccessorImpl.java:62)在java.base/jdk.internal.reflect.delegatingMethodAccessorImpl.java:43)在java.base/jdk.inflect.Method.Invoke(delegatingMethodAccessorImpl.java:566)在.MethodInjectorImpl.Invoke(MethodInjectorImpl.java:139)...

我一直在跟踪官方文件。我的另一个自定义Pbkdf2PasswordHashProvider实际上工作得很好。我是不是漏了什么?

来源

import org.keycloak.forms.login.freemarker.FreeMarkerLoginFormsProvider;
import org.keycloak.models.KeycloakSession;
import org.keycloak.theme.FreeMarkerUtil;

public class CustomFreeMarkerLoginFormsProvider extends FreeMarkerLoginFormsProvider {

    public CustomFreeMarkerLoginFormsProvider(KeycloakSession session, FreeMarkerUtil freeMarker) {
        super(session, freeMarker);
        setAttribute("isAdmin", uriInfo.getPath().contains("admin"));
    }
}

共有1个答案

凌意
2023-03-14

我在FreeMarkerAccountProvider/FreeMarkerAccountProviderFactory中遇到了类似的情况,并接收到java.lang.noClassDefoundError:org/keycloak/theme/freeMarkerutil

这解决了Keycloak插件使用keycloak-services的问题。

因为我正在向Keycloak部署器注册我的提供程序。它似乎没有所有的依赖项,所以我在src/main/resources/meta-inf下创建了一个jboss-deployment-structure.xml文件,其中包含我的依赖项。这里的示例jboss-deployment-structure.xml。

我还必须禁用现有的提供程序并激活我的提供程序。为此,我在 标记中向standalone.xlm添加了以下内容:

<spi name="account">
  <provider name="freemarker" enabled="false"/>
  <provider name="myfreemarker" enabled="true"/>
</spi>
 类似资料:
  • 我尝试创建一个自定义spi,在我的keycloak项目中,遵循基本的keycloack结构,我添加了扩展provider的自定义provider接口,正如keycloak文档所说,定制提供程序工厂并为它们实现定制spi,它们在源代码中是这样做的,之后,我为我的提供程序和提供程序工厂创建一个自定义实现,如文档所述,我在Meta-INF/Services中创建文件,我正在使用ear aproach来部

  • 我试图实现一个自定义密钥克拉克身份验证器SPI,用于对外部身份提供程序进行身份验证。用户已经存在于keycloak存储中,我只需要连接到自定义SPI来验证他们。 我正在遵循官方指南https://www.keycloak.org/docs/latest/server_development/index.html#_auth_spi_walkthrough的第8.3节,这与我所需要的非常相似。

  • 在所有这些配置之后,我转到管理控制台来配置自定义用户提供程序,它不会出现在列表中。 我能做什么?

  • 我已经实现了一个自定义的Keycloak UserStorageProvider SPI(以下是官方文档https://www.Keycloak.org/docs/latest/server_development/index.html#_user-storage-spi的第11点),它执行以下操作: 根据外部身份验证服务对用户(以前不存在于本地存储中)进行身份验证。 将(针对自定义服务成功进行身

  • 首先,我为我的英语水平不太好而道歉。我正在实习,我的任务是继续为公司开发一个内联网网站。我在实习开始时就拿到了代码,并开发了本地版本,具有本地网络服务器和本地数据库。这是我在公司服务器上部署更改版本的时候了,一旦我这样做了,到目前为止一直使用旧版本的站点会显示“ 内部服务器错误 500”。它来自什么,有人有解决方案吗?PS :该网站是用CakePhp开发的。

  • 我是Quarkus新手,我编写了一个提供rest API的扩展,我们称之为。 其思想是,扩展将提供应用程序所需的rest资源,应用程序提供业务逻辑。 因此,我创建了一个Kwkus项目,该项目使用该扩展并提供了一个bean,该bean使用业务逻辑实现。 但是,当我启动应用程序时,不会创建endpoint,当我调用它时,它会返回。 问题是:如何使扩展中定义的rest资源对使用它的应用程序可见?