Преобразование идентификатора данных Spring Spring с использованием HashID - PullRequest
0 голосов
/ 25 июня 2018

У нас есть проблема, связанная с раскрытием внутренних идентификаторов для внешнего мира.Поэтому я думаю об использовании механизма хеширования (текущий выбор - хеш-коды) для хэширования наших идентификаторов.

Я попытался использовать отображение @JsonSerializer и @JsonDeserializer в поле Entities ID.Но это вступает в силу только при включении идентификатора в тело и не влияет на идентификаторы в путях URL.

Есть ли возможность сделать это, например, что-то вроде SPI перевода идентификатора?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

То, что вам нужно, - это работа «прямо из коробки» в Spring Data REST путем настройки URI ресурса элемента :

@Configuration
public class RestConfigurer extends RepositoryRestConfigurerAdapter {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        config.withEntityLookup().forRepository(ModelRepo.class, model -> HashIdUtil.encode(model.getId()), ModelRepo::findByEncodedId);
        super.configureRepositoryRestConfiguration(config);
    }
}
public interface ModelRepo extends JpaRepository<Model, Long> {

    default Model findByEncodedId(String encodedId) {
        return getById(HashIdUtil.decode(encodedId));
    }

    Model getById(Long id);
}
public class HashIdUtil {

    private static final Hashids HASHIDS = new Hashids("salt", 8);

    public static String encode(Long source) {
        return HASHIDS.encode(source);
    }

    public static Long decode(String source) {
        return HASHIDS.decode(source)[0];
    }
}

К сожалению, из-за ошибки (я полагаю), объекты PUT / PATCH не работают в Spring Boot 2+, в отличие от предыдущей версии SB (1.5+), где она работает должным образом.

См.моя демка: sdr-hashids-demo

0 голосов
/ 25 июня 2018

Единственное, о чем я могу думать, - это создать фильтр запросов, который будет принимать запрос с закодированным идентификатором в URL, затем декодировать идентификатор и перенаправлять на URL с декодированным идентификатором.

...