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
我对 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