Java KeyClope-不调用UserModelDelegate设置器

Java KeyClope-不调用UserModelDelegate设置器,java,keycloak,keycloak-services,Java,Keycloak,Keycloak Services,我正在使用KeyClope v4.8.3 我目前正在尝试使用导入策略实现UserStorageProvider。Im遵循以下文档: 这是我的createAdapter方法: 受保护的UserModel createAdapter(RealmModel领域,字符串用户名){ UserModel local=session.userLocalStorage().getUserByUsername(用户名,领域); if(local==null){ local=session.userLocalSt

我正在使用KeyClope v4.8.3

我目前正在尝试使用导入策略实现UserStorageProvider。Im遵循以下文档:

这是我的createAdapter方法:

受保护的UserModel createAdapter(RealmModel领域,字符串用户名){
UserModel local=session.userLocalStorage().getUserByUsername(用户名,领域);
if(local==null){
local=session.userLocalStorage().addUser(领域,用户名);
local.setFederationLink(model.getId());
local.setEnabled(true);
local.setFirstName(“测试”);
local.setLastName(“测试”);
}
返回新的UserModelDelegate(本地){
@凌驾
public void setUsername(字符串用户名){
System.out.println(用户名);
super.setUsername(用户名);
}
@凌驾
公用电子邮件(字符串电子邮件){
System.out.println(电子邮件);
super.setEmail(email);
}
};
}
在登录时,将创建用户适配器并将其导入KeyClope interal数据库。当我尝试更改帐户页面上的电子邮件地址时,从未调用setEmail()方法。Keyclope只是更新内部数据库

我还需要在外部系统中更改电子邮件地址。
如何保持外部存储同步?

我们当时没有实现它,但当@monzonj要求时,我再次调查了这个问题。关键似乎是实现ImportedUserValidation接口

公共类CustomUserProvider实现ImportedUserValidation{
/*导入用户验证*/
@凌驾
公共用户模型验证(RealmModel领域,用户模型用户){
返回新的CustomUser(用户);
}
}
公共类CustomUser扩展UserModelDelegate{
公共CustomUser(UserModel委托){
超级(代表);
}
@凌驾
public void setFirstName(字符串firstName){
super.setFirstName(firstName);
//把你的代码放在这里。。。
}
}
我不确定这是否是正确的方法,但快速测试表明,当您尝试在帐户管理页面上更改您的名字时,这将调用setter


编辑:我们现在使用的是KeyClope v8.0.2

可能您可以尝试KeyClope事件侦听器SPI。在那里,您可以监听用户创建、更新和删除事件(这也将为您提供用户表示)。在那里做必要的更新。我也有同样的问题,你解决了吗?看我的答案。请尝试并报告它是否对您有效嘿,它确实有效。非常感谢。我不知道这是否是正确的方法(似乎这是一个错误),但它对我来说是有效的。我正在使用最新的KeyClope 9.0.0