spring-hateoas 或 Spring Rest 数据中的 Id 加密

Id Encryption in spring-hateoas or Spring Rest Data

我对 spring-hateoas 或 Spring 中关于加密 Resources/Entities.

的 ID 的标准模式或机制有疑问

我问的原因是,我们项目的要求是我们不会将对象的 ID 传递给外界,并且它们不应该在 GET 请求中用作参数。

我知道,Spring Rest Data 和 spring-hateoas 不提供对象的 ID,除非它们是这样配置的,但即便如此我也可以在链接中看到 ID。

我知道我可以在 Json serialisation/deseritalisation 前后对 encrypt/decrypt id 使用 PropertyEditors 或 Converters,但我想知道是否有更标准的方法?

感谢解答...

如果您拥有资源的唯一 'business id' 属性,您可以 configure SDR 来使用它而不是实体 ID。

首先,您必须使用此唯一 属性:

创建实体的查找方法
public interface MyEntityRepo extends JpaRepository<MyEntity, Long> {

  @RestResource(exported = false)
  Optional<CatalogResource> findByMyUniqueProperty(String myUniqueProperty);
}

然后用它来配置SDR:

@Component
public class DataRestConfig extends RepositoryRestConfigurerAdapter {

  @Override
  public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {

    config.withCustomEntityLookup()
        .forRepository(MyEntityRepo.class, MyEntity::getMyUniqueProperty, MyEntityRepo::findByMyUniqueProperty);

    super.configureRepositoryRestConfiguration(config);
  }
}

自定义后,您将拥有如下资源 URI:

http://localhost:8080/myEntities/myUniquePropertyValue1