春天仇恨或春季休息数据中的Id加密

时间:2017-10-24 11:44:33

标签: spring-data-rest spring-hateoas

我对spring-hateoas或Spring Rest Data中关于加密资源/实体ID的标准模式或机制有疑问。

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

我知道,Spring Rest Data和spring-hateoas不会给出对象的id,除非它们是这样配置的,但即便如此,我也能看到链接中的id。

我知道我可以使用PropertyEditors或转换器在Json序列化/ deseritalisation之前和之后加密/解密id但我只是想知道有更标准的方法吗?

感谢答案......

1 个答案:

答案 0 :(得分:1)

如果您拥有独特的商家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