2016-11-04 23 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); 
    } 
} 

これが役に立ちます。