[16.0.0.3 and later]

Liberty의 사용자 정의 사용자 저장소 개발

Liberty 서버에서 com.ibm.wsspi.security.wim.CustomRepository 인터페이스를 구현하여 사용자 기능으로서 사용자 정의 사용자 저장소를 개발할 수 있습니다. 사용자 정의 저장소 인터페이스는 계정 저장소의 대부분의 유형에 대한 지원을 가능하게 합니다.

For distributed platforms

시작하기 전에

개발자 도구를 사용하여 사용자 정의 저장소 인터페이스를 구현하려는 경우 개발자 도구에서 사용자 정의 사용자 저장소 SPI 구성에서 설명하는 대로 SPI를 사용하도록 도구를 구성하십시오.

프로시저

  1. 사용자 정의 저장소 인터페이스 com.ibm.wsspi.security.wim.CustomRepository를 구현하는 클래스를 작성하십시오. 이 클래스는 저장소 조작을 제공합니다. 이 인터페이스에 대한 자세한 정보는 프로그래밍 인터페이스(Javadoc) 또는 ${wlp.install.dir}/dev/spi/ibm/ 디렉토리에서 제품과 함께 제공되는 Java 문서의 com.ibm.websphere.appserver.spi.federatedRepository_1.0 SPI 정보를 참조하십시오.

    인터페이스 구현의 예는 저장소 인터페이스 예의 내용을 참조하십시오.

  2. 구현 클래스를 OSGi 서비스로 변환하십시오. 추가 정보는 OSGi 선언 서비스(DS)에 대해 서비스 선언의 내용을 참조하십시오.
  3. 사용자 정의 사용자 저장소를 OSGi 번들로 패키징하고 사용자 저장소 서비스를 내보내십시오. OSGi 번들 작성에 대한 자세한 정보는 OSGi 서비스 번들 작성을 참조하십시오.
  4. OSGi 번들을 포함하도록 기능 Manifest 파일을 작성하십시오. 추가 정보는 제품 확장기능의 내용을 참조하십시오.
  5. 기능이 사용자 제품 확장 위치에 설치된 후 사용자 정의 저장소 기능을 server.xml 구성 파일에 추가하십시오. 또한 사용자 정의 저장소에 필요한 appSecurity-2.0federatedRegistry-1.0 기능을 추가하십시오. 예:
    <featureManager>
    	...
    	<feature>usr:customRepositorySample-1.0</feature>
    	<feature>appSecurity-2.0</feature>
    	<feature>federatedRegistry-1.0</feature>
    </featureManager>
  6. 옵션: 사용자 및 그룹에 대한 사용자 정의된 속성을 정의하려는 경우 server.xml 파일의 federatedRepository 요소에서 속성을 구성하십시오.
    다음 예에서, myProp 속성은 PersonAccount 엔티티에 대해 정의되고 myGroupProp 속성은 Group 엔티티에 대해 정의됩니다.
    <federatedRepository>
       <primaryRealm name="sampleCustomRepositoryRealm">
           <participatingBaseEntry name="o=ibm,c=us"/>
       </primaryRealm>
       <extendedProperty dataType="String" name="myProp" entityType="PersonAccount"></extendedProperty>
       <extendedProperty dataType="String" name="myGroupProp" entityType="Group"></extendedProperty>
    </federatedRepository>

저장소 인터페이스 예

package com.myorg;

import java.util.Map;
import com.ibm.wsspi.security.wim.exception.WIMException;
import com.ibm.wsspi.security.wim.model.Root;
import com.ibm.wsspi.security.wim.CustomRepository;

public class MyCustomRepository implements CustomRepository {

    public CustomRepository() {
        System.out.println(“In my custom repository implementation”);
    }

    @Override
    public Root create(Root arg0) throws WIMException {
        System.out.println(“In my create method”);
        //Add your code here
    }

    @Override
    public Root delete(Root arg0) throws WIMException {
        System.out.println(“In my delete method”);
        //Add your code here
    }

    @Override
    public Root get(Root arg0) throws WIMException {
        System.out.println(“In my get method”);
        //Add your code here
    }

    @Override
    public String getRealm() {
        return "customRepository";
    }

    @Override
    public Root login(Root arg0) throws WIMException {
        System.out.println(“In my login method”);
        //Add your code here
    }

    @Override
    public Root search(Root arg0) throws WIMException {
        System.out.println(“In my search method”);
        //Add your code here
    }
 
    @Override
    public Root update(Root arg0) throws WIMException {
        System.out.println(“In my update method”);
        //Add your code here
    }

    @Override
    public Map<String, String> getRepositoryBaseEntries() {
        System.out.println(“In my getRepositoryBaseEntries method”);
        //Add your code here
    }

    @Override
    public String[] getRepositoriesForGroups() {
        System.out.println(“In my getRepositoriesForGroups method”);
        //Add your code here
    }
}

주제의 유형을 표시하는 아이콘 태스크 주제

파일 이름: twlp_sec_cust_repository.html