2016-11-04 5 views
0

예제 사용자 연합 공급자를 새로운 버전의 keycloak (https://github.com/Smartling/keycloak-user-migration-provider)로 마이그레이션하려고하지만 호환되지 않는 API 변경 사항에 대한 확실한 설명서가 없습니다. 즉 UserFederationProvider 인터페이스가 대체 된 것처럼 보입니다. 몇 가지 더 구체적인 인터페이스가 있지만 이들 사이에서 마이그레이션하는 방법에 대한 예제는없는 것처럼 보입니다.Keycloak Federation SPI 변경

나는 내가 keycloak 샘플에 따라 변화의 대부분을 얻었다 고 생각하지만, Smartling 예에서 RemoteUserFederationProvider이 제거 된 것으로 것 같은 updateCredential 방법이있는 UserModel 인터페이스를 사용한다 어디 혼란 스러워요 최신 버전. 최신 버전의 Keycloak에서 어떻게 구현해야합니까?

답변

0

UserModel 변경 사항이 Keycloak 1.7과 2.0 사이에서 발생했다고 생각합니다.

이 스 니펫은 Keycloak 2.0 구현에서 가져온 것입니다.

package org.sample.keycloak.federation; 

import org.keycloak.models.UserCredentialModel; 
import org.keycloak.models.UserCredentialValueModel; 
import org.keycloak.models.UserModel; 
import org.keycloak.models.utils.UserModelDelegate; 

/** 
* Readonly proxy for a UserModel that prevents passwords from being updated. 
* 
* @author <a href="mailto:[email protected]">Bill Burke</a> 
* @version $Revision: 1 $ 
*/ 
public class UserModelProxy extends UserModelDelegate { 

    public UserModelProxy(UserModel delegate) { 
     super(delegate); 
    } 

    @Override 
    public void setUsername(String username) { 
     throw new IllegalStateException("Username is readonly"); 
    } 

    @Override 
    public void updateCredentialDirectly(UserCredentialValueModel cred) { 
     if (cred.getType().equals(UserCredentialModel.PASSWORD)) { 
      throw new IllegalStateException("Passwords are readonly"); 
     } 
     super.updateCredentialDirectly(cred); 
    } 

    @Override 
    public void updateCredential(UserCredentialModel cred) { 
     if (cred.getType().equals(UserCredentialModel.PASSWORD)) { 
      throw new IllegalStateException("Passwords are readonly"); 
     } 
     super.updateCredential(cred); 
    } 
} 

희망이 있습니다.