TL;DR: all code is directly available on GitHub: https://github.com/damienbeaufils/spring-data-jpa-encryption-example
Each time I want to encrypt entity fields values with JPA converters, I end up reading this blog post. This example is clear and functional, but has no unit or integration tests, and I thought the code could be more decoupled to avoid duplication when having multiple converters.
So I wrote an example using Spring Boot and Spring Data JPA, with a
User entity which have different fields:
LocalDateTime). All fields except
id are encrypted in database using AES algorithm.
Encryption is enabled on fields using different JPA converters:
LocalDateTimeCryptoConverter. This is verified with
UserRepositoryTest integration test, and all converters are unit tested.
Encryption key is empty by default (see
example.database.encryption.key configuration key in
application.yml). You have to provide an encryption key in configuration or specify it in options when running application.
Feel free to fork & enjoy!