Spring Boot-configuratie met Jasypt

1. Inleiding

Jasypt (Java Simplified Encryption) Spring Boot biedt hulpprogramma's voor het versleutelen van eigendomsbronnen in Boot-applicaties.

In dit artikel bespreken we hoe we ondersteuning voor jasypt-spring-boot kunnen toevoegen en deze kunnen gebruiken.

Voor meer informatie over het gebruik van Jasypt als een framework voor codering, bekijk hier onze Inleiding tot Jasypt.

2. Waarom Jasypt?

Elke keer dat we gevoelige informatie in het configuratiebestand moeten opslaan, betekent dat dat we die informatie in wezen kwetsbaar maken; dit omvat alle soorten gevoelige informatie, zoals inloggegevens, maar zeker veel meer dan dat.

Door met behulp van Jasypt kunnen we codering bieden voor de eigenschappen van het eigenschappenbestand en onze applicatie zal het ontcijferen en de oorspronkelijke waarde ophalen.

3. Manieren om JASYPT te gebruiken met Spring Boot

Laten we de verschillende manieren bespreken om Jasypt met Spring Boot te gebruiken.

3.1. Gebruik makend van jasypt-veer-boot-starter

We moeten een enkele afhankelijkheid aan ons project toevoegen:

 com.github.ulisesbocchio jasypt-spring-boot-starter 2.0.0 

Maven Central heeft de nieuwste versie van de jasypt-spring-boot-starter.

Laten we nu de tekst versleutelen "[E-mail beschermd]" met geheime sleutel "wachtwoord" en voeg deze toe aan het encrypted.properties:

encrypted.property = ENC (uTSqb9grs1 + vUv3iN8lItC0kl65lMG + 8)

En laten we een configuratieklasse definiëren AppConfigForJasyptStarter - om het encrypted.properties bestand als een PropertySource :

@Configuration @PropertySource ("encrypted.properties") openbare klasse AppConfigForJasyptStarter {} 

Nu zullen we een serviceboon schrijven PropertyServiceForJasyptStarter om de waarden op te halen uit de encrypted.properties. De ontsleutelde waarde kan worden opgehaald met de @Waarde annotatie of de getProperty () methode van Milieu klasse:

@Service openbare klasse PropertyServiceForJasyptStarter {@Value ("$ {encrypted.property}") privé String-eigenschap; public String getProperty () {eigenschap retourneren; } public String getPasswordUsingEnvironment (omgevingsomgeving) {return environment.getProperty ("encrypted.property"); }} 

Tenslotte, met behulp van de bovenstaande serviceklasse en het instellen van de geheime sleutel die we hebben gebruikt voor codering, kunnen we het gedecodeerde wachtwoord gemakkelijk ophalen en gebruiken in onze applicatie:

@Test openbaar ongeldig whenDecryptedPasswordNeeded_GetFromService () {System.setProperty ("jasypt.encryptor.password", "wachtwoord"); PropertyServiceForJasyptStarter service = appCtx .getBean (PropertyServiceForJasyptStarter.class); assertEquals ("[e-mail beschermd]", service.getProperty ()); Omgeving omgeving = appCtx.getBean (Environment.class); assertEquals ("[e-mail beveiligd]", service.getPasswordUsingEnvironment (omgeving)); } 

3.2. Met behulp van jasypt-spring-boot

Voor projecten die geen gebruik maken van @SpringBootApplication of @EnableAutoConfiguration, kunnen we de jasypt gebruiken-veerlaars afhankelijkheid direct:

 com.github.ulisesbocchio jasypt-spring-boot 2.0.0 

Laten we op dezelfde manier de tekst versleutelen "[E-mail beschermd]" met geheime sleutel "wachtwoord" en voeg het toe aan het encryptedv2.properties:

encryptedv2.property = ENC (dQWokHUXXFe + OqXRZYWu22BpXoRZ0Drt)

En laten we een nieuwe configuratieklasse hebben voor de afhankelijkheid van jasypt-spring-boot.

Hier moeten we de annotatie toevoegen @EncryptablePropertySource :

@Configuration @EncryptablePropertySource ("encryptedv2.properties") openbare klasse AppConfigForJasyptSimple {}

Ook een nieuwe PropertyServiceForJasyptSimple boon om terug te keren encryptedv2.properties is gedefinieerd:

@Service openbare klasse PropertyServiceForJasyptSimple {@Value ("$ {encryptedv2.property}") privé String-eigenschap; public String getProperty () {eigenschap retourneren; }} 

Ten slotte kunnen we, door de bovenstaande serviceklasse te gebruiken en de geheime sleutel in te stellen die we voor codering hebben gebruikt, gemakkelijk de encryptedv2.property:

@Test openbaar ongeldig whenDecryptedPasswordNeeded_GetFromService () {System.setProperty ("jasypt.encryptor.password", "wachtwoord"); PropertyServiceForJasyptSimple service = appCtx .getBean (PropertyServiceForJasyptSimple.class); assertEquals ("[e-mail beschermd]", service.getProperty ()); } 

3.3. Met behulp van Custom JASYPT Encryptor

De encryptors gedefinieerd in sectie 3.1. en 3.2. zijn geconstrueerd met de standaard configuratiewaarden.

Laten we echter onze eigen Jasypt-encryptor gaan definiëren en probeer te gebruiken voor onze applicatie.

S0, de aangepaste encryptorboon ziet er als volgt uit:

@Bean (name = "encryptorBean") openbare StringEncryptor stringEncryptor () {PooledPBEStringEncryptor encryptor = nieuwe PooledPBEStringEncryptor (); SimpleStringPBEConfig config = nieuwe SimpleStringPBEConfig (); config.setPassword ("wachtwoord"); config.setAlgorithm ("PBEWithMD5AndDES"); config.setKeyObtentionIterations ("1000"); config.setPoolSize ("1"); config.setProviderName ("SunJCE"); config.setSaltGeneratorClassName ("org.jasypt.salt.RandomSaltGenerator"); config.setStringOutputType ("base64"); encryptor.setConfig (config); terug encryptor; } 

Bovendien kunnen we alle eigenschappen voor het SimpleStringPBEConfig.

Ook, we moeten een eigenschap toevoegen "Jasypt.encryptor.bean" naar onze application.properties, zodat Spring Boot weet welke Custom Encryptor het moet gebruiken.

We voegen bijvoorbeeld de aangepaste tekst toe "[E-mail beschermd]" versleuteld met geheime sleutel "wachtwoord" in de application.properties:

jasypt.encryptor.bean = encryptorBean encryptedv3.property = ENC (askygdq8PHapYFnlX6WsTwZZOxWInq + i)

Zodra we het hebben ingesteld, kunnen we gemakkelijk het encryptedv3.property uit de lente Milieu:

@Test openbare ongeldig whenConfiguredExcryptorUsed_ReturnCustomEncryptor () {Omgevingomgeving = appCtx.getBean (Environment.class); assertEquals ("[e-mail beveiligd]", environment.getProperty ("encryptedv3.property")); } 

4. Conclusie

Door Jasypt te gebruiken, kunnen weextra beveiliging bieden voor de gegevens die de applicatie verwerkt.

Het stelt ons in staat om ons meer te concentreren op de kern van onze applicatie en kan indien nodig ook worden gebruikt om aangepaste codering te bieden.

Zoals altijd is de volledige code voor dit voorbeeld beschikbaar op Github.