Spring Boot Configuration with Jasypt

1. Introduksjon

Jasypt (Java Simplified Encryption) Spring Boot tilbyr verktøy for kryptering av eiendomskilder i Boot-applikasjoner.

I denne artikkelen vil vi diskutere hvordan vi kan legge til støtte for jasypt-spring-boot og bruke den.

For mer informasjon om bruk av Jasypt som et rammeverk for kryptering, ta en titt på vår introduksjon til Jasypt her.

2. Hvorfor Jasypt?

Når vi trenger å lagre sensitiv informasjon i konfigurasjonsfilen - betyr det at vi i hovedsak gjør den informasjonen sårbar dette inkluderer alle slags sensitiv informasjon, for eksempel legitimasjon, men absolutt mye mer enn det.

Av ved hjelp av Jasypt kan vi gi kryptering for egenskapens filattributter og applikasjonen vår vil gjøre jobben med å dekryptere den og hente den opprinnelige verdien.

3. Måter å bruke JASYPT med vårstøvel på

La oss diskutere de forskjellige måtene å bruke Jasypt med Spring Boot på.

3.1. Ved hjelp av jasypt-spring-boot-starter

Vi må legge til en enkelt avhengighet til prosjektet vårt:

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

Maven Central har den nyeste versjonen av jasypt-spring-boot-starter.

La oss nå kryptere teksten “[E-postbeskyttet]” med hemmelig nøkkel "passord" og legg det til kryptert.egenskaper:

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

Og la oss definere en konfigurasjonsklasse AppConfigForJasyptStarter - for å spesifisere kryptert.egenskaper fil som en PropertySource :

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

Nå skal vi skrive en servicebønne PropertyServiceForJasyptStarter for å hente verdiene fra kryptert.egenskaper. Den dekrypterte verdien kan hentes ved hjelp av @Verdi kommentar eller getProperty () Metode av Miljø klasse:

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

Endelig, ved å bruke tjenesteklassen ovenfor og angi den hemmelige nøkkelen som vi brukte for kryptering, kan vi enkelt hente det dekrypterte passordet og bruke det i applikasjonen vår:

@Test offentlig ugyldig nårDecryptedPasswordNeeded_GetFromService () {System.setProperty ("jasypt.encryptor.password", "passord"); 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. Bruke jasypt-spring-boot

For prosjekter som ikke bruker @SpringBootApplication eller @EnableAutoConfiguration, vi kan bruke jasypt-fjær-støvel avhengighet direkte:

 com.github.ulisesbocchio jasypt-spring-boot 2.0.0 

På samme måte, la oss kryptere teksten “[E-postbeskyttet]” med hemmelig nøkkel "passord" og legg den til encryptedv2.properties:

encryptedv2.property = ENC (dQWokHUXXFe + OqXRZYWu22BpXoRZ0Drt)

Og la oss ha en ny konfigurasjonsklasse for jasypt-spring-boot avhengighet.

Her må vi legge til kommentaren @EncryptablePropertySource :

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

Også en ny PropertyServiceForJasyptSimple bønne å komme tilbake encryptedv2.properties er definert:

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

Til slutt, ved å bruke ovennevnte tjenesteklasse og sette den hemmelige nøkkelen som vi brukte for kryptering, kan vi enkelt hente encryptedv2.property:

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

3.3. Bruke tilpasset JASYPT Encryptor

Krypterne definert i avsnitt 3.1. og 3.2. er konstruert med standard konfigurasjonsverdier.

La oss imidlertid gå og definere vår egen Jasypt-krypterer og prøv å bruke for applikasjonen vår.

S0, den tilpassede krypteringsbønnen vil se ut:

@Bean (name = "encryptorBean") offentlig StringEncryptor stringEncryptor () {PooledPBEStringEncryptor encryptor = ny PooledPBEStringEncryptor (); SimpleStringPBEConfig config = ny SimpleStringPBEConfig (); config.setPassword ("passord"); 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; } 

Videre kan vi endre alle egenskapene for SimpleStringPBEConfig.

Også, vi trenger å legge til en eiendom “Jasypt.encryptor.bean” til vår application.properties, slik at Spring Boot vet hvilken Custom Encryptor den skal bruke.

For eksempel legger vi til den tilpassede teksten “[E-postbeskyttet]” kryptert med hemmelig nøkkel "passord" i application.properties:

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

Når vi har satt den, kan vi enkelt få tak i encryptedv3.property fra vårens Miljø:

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

4. Konklusjon

Ved å bruke Jasypt kan vigi ekstra sikkerhet for dataene som applikasjonen håndterer.

Det gjør at vi kan fokusere mer på kjernen i applikasjonen vår, og kan også brukes til å gi tilpasset kryptering om nødvendig.

Som alltid er den komplette koden for dette eksemplet tilgjengelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found