https://github.com/tap30/hiss-spring-boot-mongo-starter
Integrates Hiss library with Spring data mongo
https://github.com/tap30/hiss-spring-boot-mongo-starter
Last synced: over 1 year ago
JSON representation
Integrates Hiss library with Spring data mongo
- Host: GitHub
- URL: https://github.com/tap30/hiss-spring-boot-mongo-starter
- Owner: Tap30
- Created: 2024-06-10T14:00:53.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2025-01-03T22:14:53.000Z (over 1 year ago)
- Last Synced: 2025-02-05T16:46:32.993Z (over 1 year ago)
- Language: Java
- Size: 73.2 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Hiss Spring Boot Mongo Starter [](https://github.com/Tap30/hiss-spring-boot-mongo-starter/actions/workflows/build.yml)
An small library which uses Spring Boot autoconfiguration capability that integrates Hiss with Spring Boot and Spring Data Mongo.
By integrating Hiss with Spring Boot project we mean registration of:
- Hiss bean [using environment variables](https://github.com/Tap30/hiss?tab=readme-ov-file#creating-properties-from-environment-variables)
- Mongo interceptor which automatically encrypts objects before saving to DB and decrypts them after loading.
An example project is created [here](https://github.com/mkay1375/spring-with-hiss-example).
## Quick Start
### 1. Add Hiss dependency
Apache Maven:
```xml
io.github.tap30
hiss-spring-boot-mongo-starter
0.10.0
```
Gradle (Groovy):
```groovy
implementation 'io.github.tap30:hiss-spring-boot-mongo-starter:0.10.0'
```
Gradle (Kotlin):
```kotlin
implementation("io.github.tap30:hiss-spring-boot-mongo-starter:0.10.0")
```
### 2. Set environment variables
```bash
HISS_KEYS_A=AAAAAAAAAAAAAAAAAAAAAA==
HISS_KEYS_B=AAAAAAAAAAAAAAAAAAAAAA==
# other keys...
HISS_DEFAULT_ENCRYPTION_KEY_ID=a
HISS_DEFAULT_ENCRYPTION_ALGORITHM=aes-128-gcm
HISS_DEFAULT_HASHING_KEY_ID=b
HISS_DEFAULT_HASHING_ALGORITHM=hmac-sha256
```
For more information about envs see
[this](https://github.com/Tap30/hiss?tab=readme-ov-file#creating-properties-from-environment-variables).
### 3. Annotate your class with `@Encrypted`
```java
import io.github.tap30.Encrypted;
public class User {
@Encrypted
private String phoneNumber;
private String hashedPhoneNumber;
// getters and setters
}
```
Note: Getters and setters must exist as Hiss use them to get/set values.
## Using custom `HissPropertiesProvider`
By implementing `HissPropertiesProvider` and annotating it with `@Component`
this library will pick your implementation rather than default one.
## Using custom encryption and hashing algorithms
Just like custom `HissPropertiesProvider` by implementing `Encryptor` and `Hasher` interfaces
and annotating them with `@Component`, this library will pick them up.
For more information about `Encryptor`s and `Hasher`s see [Hiss readme](https://github.com/Tap30/hiss?tab=readme-ov-file#supported-algorithms).
## Querying Data
Currently there is not an easy way to support querying encrypted fields.
To query data, inject Hiss bean (`@Autowired Hiss hiss`)
and use `Hiss$hash(String)` method to generate hash of content;
then pass it to the queries which use hashed fields.