2016-11-04 139 views
0

我試圖將示例用戶聯合提供程序遷移到新版本的keycloak(https://github.com/Smartling/keycloak-user-migration-provider),但我沒有發現任何有關不兼容的API更改的明顯文檔(即UserFederationProvider界面似乎已被替換與幾個更具體的接口,但似乎沒有任何如何遷移它們之間的例子)。Keycloak Federation SPI更改

我想我已經通過遵循keycloak樣品得到大部分的變化,但我很困惑,其中在Smartling例如RemoteUserFederationProvider利用了UserModel接口,它有一個updateCredential方法似乎已經在被刪除的最新版本。應該如何在更新版本的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); 
    } 
} 

希望這會有所幫助。