Spring Boot Configuration med Jasypt

1. Introduktion

Jasypt (Java Simplified Encryption) Spring Boot giver hjælpeprogrammer til kryptering af ejendomskilder i Boot-applikationer.

I denne artikel vil vi diskutere, hvordan vi kan tilføje support til jasypt-spring-boot og bruge den.

For mere information om brug af Jasypt som en ramme for kryptering, se vores introduktion til Jasypt her.

2. Hvorfor Jasypt?

Når vi har brug for at gemme følsomme oplysninger i konfigurationsfilen - betyder det, at vi i det væsentlige gør disse oplysninger sårbare; dette inkluderer enhver form for følsom information, såsom legitimationsoplysninger, men bestemt meget mere end det.

Ved ved hjælp af Jasypt kan vi give kryptering til egenskabens filattributter og vores applikation gør jobbet med at dekryptere det og hente den oprindelige værdi.

3. Måder at bruge JASYPT med Spring Boot

Lad os diskutere de forskellige måder at bruge Jasypt med Spring Boot på.

3.1. Ved brug af jasypt-spring-boot-starter

Vi er nødt til at tilføje en enkelt afhængighed til vores projekt:

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

Maven Central har den nyeste version af jasypt-spring-boot-starter.

Lad os nu kryptere teksten “[Email protected]” med hemmelig nøgle "adgangskode" og tilføj den til krypteret.egenskaber:

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

Og lad os definere en konfigurationsklasse AppConfigForJasyptStarter - for at specificere krypteret. ejendomme fil som en PropertySource :

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

Nu skriver vi en servicebønne PropertyServiceForJasyptStarter for at hente værdierne fra krypteret. ejendomme. Den dekrypterede værdi kan hentes ved hjælp af @Værdi kommentar eller getProperty () metode til Miljø klasse:

@Service offentlig klasse PropertyServiceForJasyptStarter {@Value ("$ {encrypted.property}") privat strengejendom; public String getProperty () {return property; } public String getPasswordUsingEnvironment (Environment environment) {return environment.getProperty ("encrypted.property"); }} 

Langt om længe, ved hjælp af ovenstående serviceklasse og indstilling af den hemmelige nøgle, som vi brugte til kryptering, kan vi nemt hente den dekrypterede adgangskode og bruge i vores applikation:

@Test offentlig ugyldig nårDecryptedPasswordNeeded_GetFromService () {System.setProperty ("jasypt.encryptor.password", "password"); PropertyServiceForJasyptStarter service = appCtx .getBean (PropertyServiceForJasyptStarter.class); assertEquals ("[email protected]", service.getProperty ()); Miljømiljø = appCtx.getBean (Environment.class); assertEquals ("[email protected]", service.getPasswordUsingEnvironment (miljø)); } 

3.2. Brug af jasypt-spring-boot

Til projekter, der ikke bruger @SpringBootApplication eller @EnableAutoConfiguration, vi kan bruge jasypt-spring-støvle afhængighed direkte:

 com.github.ulisesbocchio jasypt-spring-boot 2.0.0 

Lad os ligeledes kryptere teksten “[E-mail-beskyttet]” med hemmelig nøgle "adgangskode" og tilføj det til encryptedv2.properties:

encryptedv2.property = ENC (dQWokHUXXFe + OqXRZYWu22BpXoRZ0Drt)

Og lad os have en ny konfigurationsklasse for jasypt-spring-boot afhængighed.

Her skal vi tilføje kommentaren @EncryptablePropertySource :

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

Også en ny PropertyServiceForJasyptSimple bønne at vende tilbage encryptedv2.properties er defineret:

@Service offentlig klasse PropertyServiceForJasyptSimple {@Value ("$ {encryptedv2.property}") privat strengejendom; public String getProperty () {return property; }} 

Endelig ved hjælp af ovenstående serviceklasse og indstilling af den hemmelige nøgle, som vi brugte til kryptering, kan vi nemt hente encryptedv2.property:

@Test offentlig ugyldig nårDecryptedPasswordNeeded_GetFromService () {System.setProperty ("jasypt.encryptor.password", "password"); PropertyServiceForJasyptSimple service = appCtx .getBean (PropertyServiceForJasyptSimple.class); assertEquals ("[email protected]", service.getProperty ()); } 

3.3. Brug af brugerdefineret JASYPT Encryptor

Krypterne defineret i afsnit 3.1. og 3.2. er konstrueret med standardkonfigurationsværdierne.

Lad os dog gå og definere vores egen Jasypt-kryptering og prøv at bruge til vores applikation.

S0, den brugerdefinerede krypteringsbønne vil se ud:

@Bean (name = "encryptorBean") offentlig StringEncryptor stringEncryptor () {PooledPBEStringEncryptor encryptor = ny PooledPBEStringEncryptor (); SimpleStringPBEConfig config = ny SimpleStringPBEConfig (); config.setPassword ("adgangskode"); config.setAlgorithm ("PBEWithMD5AndDES"); config.setKeyObtentionIterations ("1000"); config.setPoolSize ("1"); config.setProviderName ("SunJCE"); config.setSaltGeneratorClassName ("org.jasypt.salt.RandomSaltGenerator"); config.setStringOutputType ("base64"); encryptor.setConfig (config); returner kryptering } 

Desuden kan vi ændre alle egenskaberne til SimpleStringPBEConfig.

Også, vi er nødt til at tilføje en ejendom “Jasypt.encryptor.bean” til vores application.properties, så Spring Boot ved, hvilken Custom Encryptor den skal bruge.

For eksempel tilføjer vi den tilpassede tekst “[Email protected]” krypteret med hemmelig nøgle "adgangskode" i application.properties:

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

Når vi først har indstillet det, kan vi nemt få det encryptedv3.property fra forårets Miljø:

@Test offentlig ugyldig nårConfiguredExcryptorUsed_ReturnCustomEncryptor () {Miljømiljø = appCtx.getBean (Environment.class); assertEquals ("[email protected]", environment.getProperty ("encryptedv3.property")); } 

4. Konklusion

Ved at bruge Jasypt kan vigiver yderligere sikkerhed for de data, som applikationen håndterer.

Det giver os mulighed for at fokusere mere på kernen i vores applikation og kan også bruges til at levere tilpasset kryptering, hvis det kræves.

Som altid er den komplette kode til dette eksempel tilgængelig på Github.