Spring 如何获取一个领域的所有用户并将其保存到应用程序数据库?

Spring 如何获取一个领域的所有用户并将其保存到应用程序数据库?,spring,spring-boot,keycloak,Spring,Spring Boot,Keycloak,我正在用spring boot构建一个REST API,对于身份验证和授权,我正在使用KeyClope。因为用户是由keydape管理的,所以我的应用程序数据库没有用户的数据。但我想在我的应用程序数据库中存储来自KeyClope的用户实体的一些属性,因为审计需要用户数据 那么,将应用程序数据库用户表与keydape用户表同步的最佳方法是什么呢?我将基于EventListenerSpi实现一个keydape插件。在EventListenerProvider实现中,您可以只关注用户管理事件 publ

我正在用spring boot构建一个REST API,对于身份验证和授权,我正在使用KeyClope。因为用户是由keydape管理的,所以我的应用程序数据库没有用户的数据。但我想在我的应用程序数据库中存储来自KeyClope的用户实体的一些属性,因为审计需要用户数据


那么,将应用程序数据库用户表与keydape用户表同步的最佳方法是什么呢?

我将基于EventListenerSpi实现一个keydape插件。在EventListenerProvider实现中,您可以只关注用户管理事件

public class SyncEventListener implements EventListenerProvider
{
  private static final List<OperationType> SYNC_OPERATIONS = Arrays.asList(OperationType.CREATE, OperationType.UPDATE, OperationType.DELETE);
  @Override
  public void close() {}

  @Override
  public void onEvent(Event event) {}

  @Override
  public void onEvent(AdminEvent event, boolean includeRepresentation)
  {
    if ((event.getResourceType() == ResourceType.USER) && SYNC_OPERATIONS.contains(event.getOperationType()) )
    {
      // Write user data to external message queue or database
      externalStore.write(event.getOperationType(), event.getRepresentation());
    }
  }
}
公共类SyncEventListener实现EventListenerProvider
{
私有静态最终列表SYNC_OPERATIONS=Arrays.asList(OperationType.CREATE、OperationType.UPDATE、OperationType.DELETE);
@凌驾
公共void close(){}
@凌驾
public void onEvent(事件){}
@凌驾
public void onEvent(AdminEvent事件,布尔includePresentation)
{
if((event.getResourceType()==ResourceType.USER)&&SYNC_OPERATIONS.contains(event.getOperationType())
{
//将用户数据写入外部消息队列或数据库
write(event.getOperationType(),event.getRepresentation());
}
}
}
getRepresentation()返回一个包含所有用户数据的JSON对象。 当然,您必须通过keydove管理控制台(events/Config/admin-events-Settings)打开管理事件来实现这一点。
将“保存事件”和“包含表示”都置于启用状态

您是否需要用户一次全部登录,或者您可以在他们登录时执行此操作?我无法在他们登录时添加用户,因为我正在使用KeyClope access token endpoint登录用户,因此我无法从我的API截获登录事件。感谢您的回答。当我实现这一点时,我在
getResourceType()
中得到一个错误,因为事件对象中没有使用此名称的方法。我该如何解决这个问题?我还可以将这个文件类作为RESTAPI的一部分吗?您必须定义对KeyClope库的依赖关系。对于gradle,即:编译组:'org.keydove',名称:'keydove server spi',版本:'3.3.0.Final'编译组:'org.keydove',名称:'keydove server spi private',版本:'3.3.0.Final'