搜索

第 6 章 服务提供商接口(SPI)

download PDF

Red Hat Single Sign-On 是在不需要自定义代码的情况下覆盖大多数用例,但我们也希望可以自定义。要达到此目的,Red Hat Single Sign-On 有许多可实施您自己的提供程序的服务提供商接口(SPI)。

6.1. 实施 SPI

要实施 SPI,您需要实施其提供商工厂和提供程序接口。您还需要创建服务配置文件。

例如,要实施 Theme Selector SPI,您需要实施 ThemeSelectorProviderFactory 和 ThemeSelectorProvidery,并提供文件 META-INF/services/org.keycloak.theme.ThemeSelectorProviderFactory.

ThemeSelectorProviderFactory 示例:

package org.acme.provider;

import ...

public class MyThemeSelectorProviderFactory implements ThemeSelectorProviderFactory {

    @Override
    public ThemeSelectorProvider create(KeycloakSession session) {
        return new MyThemeSelectorProvider(session);
    }

    @Override
    public void init(Config.Scope config) {
    }

    @Override
    public void postInit(KeycloakSessionFactory factory) {
    }

    @Override
    public void close() {
    }

    @Override
    public String getId() {
        return "myThemeSelector";
    }
}
注意

Red Hat Single Sign-On 创建一个单一供应商工厂实例,以便存储多个请求的状态。提供商实例通过在每个请求的工厂上调用 create 来创建,因此它们应该是轻量级的对象。

ThemeSelectorProvider 示例:

package org.acme.provider;

import ...

public class MyThemeSelectorProvider implements ThemeSelectorProvider {

    public MyThemeSelectorProvider(KeycloakSession session) {
    }


    @Override
    public String getThemeName(Theme.Type type) {
        return "my-theme";
    }

    @Override
	public void close() {
    }
}

服务配置文件示例(META-INF/services/org.keycloak.theme.ThemeSelectorProviderFactory):

org.acme.provider.MyThemeSelectorProviderFactory

您可以通过 standalone.xmlstandalone-ha.xmldomain.xml 配置您的供应商。

例如,将以下内容添加到 standalone.xml 中:

<spi name="themeSelector">
    <provider name="myThemeSelector" enabled="true">
        <properties>
            <property name="theme" value="my-theme"/>
        </properties>
    </provider>
</spi>

然后您可以在 ProviderFactory init 方法中检索配置:

public void init(Config.Scope config) {
    String themeName = config.get("theme");
}

如果需要,您的供应商也可以查找其他提供程序。例如:

public class MyThemeSelectorProvider implements ThemeSelectorProvider {

    private KeycloakSession session;

    public MyThemeSelectorProvider(KeycloakSession session) {
        this.session = session;
    }

    @Override
    public String getThemeName(Theme.Type type) {
        return session.getContext().getRealm().getLoginTheme();
    }
}

6.1.1. 在管理控制台中显示您的 SPI 实施的信息

有时,对于向 Red Hat Single Sign-On 管理员显示您的提供程序的其他信息会很有用。您可以显示供应商构建时间信息(例如,当前安装的自定义提供程序版本)、提供商的当前配置(例如,您的供应商与供应商的 url)或一些操作信息(从远程系统通信到的发送时间)。Red Hat Single Sign-On Admin Console 提供 Server Info 页面来显示此类信息。

要显示供应商中的信息,足以在您的 ProviderFactory 中实现 org.keycloak.provider.ServerInfoAware ProviderFactory 接口。

上例中的 MyThemeSelectorProviderFactory 的实现示例:

package org.acme.provider;

import ...

public class MyThemeSelectorProviderFactory implements ThemeSelectorProviderFactory, ServerInfoAwareProviderFactory {
    ...

    @Override
    public Map<String, String> getOperationalInfo() {
        Map<String, String> ret = new LinkedHashMap<>();
        ret.put("theme-name", "my-theme");
        return ret;
    }
}
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.