Dev

9. [SSO] Keycloak User Storage SPI 번역해보기 - 2

VIPeveloper 2020. 10. 13. 14:09
728x90
반응형

1. 서론

어제에 이어 계속해서 번역작업을 진행해보도록 하겠습니다. 어제 내용을 잠깐 복습해보면, SPI라는 것을 이용하면, Keycloak과 기존 사용자 DB를 연동하여 이용할 수 있다고 하였습니다. UserStorageProvider를 구현하고, UserStorageProviderFactory 를 구현해주어야 한다고 했습니다. 저번시간에는 UserStorageProvider에 대해 집중 탐구해보았으니, 오늘은 Factory에 대해 탐구해보겠습니다.

2. 본론

2.5.2. Provider Factory Implementation

public class DemoUserStorageProviderFactory implements UserStorageProviderFactory<DemoUserStorageProvider> {

    public static final String PROVIDER_NAME = "demo-user-provider";

    @Override
    public String getId() {
        return PROVIDER_NAME;
    }
}

먼저 DemoUserStorageProviderFactory 클래스를 구현할 때 템플릿 매개 변수로 구체적인 Provider 클래스 타입을 지정해야 합니다. 앞에서 정의한 공급자 클래스를 지정합니다. <DemoUserStorageProvider>

**템플릿 매개 변수를 지정하지 않으면 공급자가 작동하지 않습니다. 런타임은 공급자가 구현하는 기능 인터페이스를 확인하기 위해 클래스 내성을 수행합니다.

 

getId() 메서드는 런타임에서 팩토리를 식별합니다. 또 사용자 스토리지 제공자를 realm에서 user Federation 탭을 클릭할 때 보여지도록 하는 문자열이기도 합니다.

7.5.2.1. Initialization

    private static final Logger logger = Logger.getLogger(PropertyFileUserStorageProviderFactory.class);
    protected Properties properties = new Properties();

    @Override
    public void init(Config.Scope config) {
        InputStream is = getClass().getClassLoader().getResourceAsStream("/users.properties");

        if (is == null) {
            logger.warn("Could not find users.properties in classpath");
        } else {
            try {
                properties.load(is);
            } catch (IOException ex) {
                logger.error("Failed to load users.properties file", ex);
            }
        }
    }

    @Override
    public PropertyFileUserStorageProvider create(KeycloakSession session, ComponentModel model) {
        return new PropertyFileUserStorageProvider(session, model, properties);
    }

 

728x90
반응형