6장. SPI(Service Provider Interfaces)


Red Hat Single Sign-On은 사용자 정의 코드 없이도 대부분의 사용 사례를 처리하도록 설계되었지만 사용자 정의할 수 있기를 바랍니다. 이를 위해 Red Hat Single Sign-On에는 자체 공급자를 구현할 수 있는 다양한 SPI(서비스 공급자 인터페이스)가 있습니다.

6.1. SPI 구현

SPI를 구현하려면 ProviderFactory 및 Provider 인터페이스를 구현해야 합니다. 서비스 구성 파일도 생성해야 합니다.

예를 들어 Theme Selector SPI를 구현하려면 ThemeSelectorProviderFactory 및 ThemeSelectorProviderProvider 파일을 구현해야 하며 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.xml,standalone-ha.xml 또는 domain.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 관리 콘솔은 이러한 종류의 정보를 표시할 수 있는 서버 정보 페이지를 제공합니다.

공급자의 정보를 표시하려면 ProviderFactory 에서 org.keycloak.provider.ServerInfoAwareProviderFactory 인터페이스를 구현하는 것으로 충분합니다.

이전 예의 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

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.