28 Eylül 2021 Salı

SpringBoot DataSource Jasypt - Java Simplified Encryption

Giriş
Bir örnek  burada. application.properties dosyasında şifreli veri kullanıbilmeyi sağlar.

1. Maven
Şu satırı dahil ederiz
<dependency>
  <groupId>com.github.ulisesbocchio</groupId>
  <artifactId>jasypt-spring-boot-starter</artifactId>
  <version>3.0.4</version>
</dependency>
<plugin>
   <groupId>com.github.ulisesbocchio</groupId>
   <artifactId>jasypt-maven-plugin</artifactId>
   <version>3.0.4</version>
</plugin>
2. @EnableEncryptableProperties Anotasyonu
Şöyle yaparız
@SpringBootApplication
@EnableEncryptableProperties
public class MyApplication {
    ...
}
3. application.yml
Şöyle yaparız. Burada şifrelenmesi istenilen şeylere DEC(..) yazılıyor
jasypt:
encryptor: algorithm: PBEWithMD5AndTripleDES iv-generator-classname: org.jasypt.iv.NoIvGenerator password: ${JASYPT_ENCRYPTOR_PASSWORD} spring: datasource: url: jdbc:mysql://localhost:3306/cdr?useSSL=false username: DEC(root) password: DEC(root123)
Dosyayı şifrelemek için şöyle yaparız
mvn jasypt:encrypt -Djasypt.plugin.path=”file:src/main/resources/application.yml”
-Djasypt.encryptor.password=”secretkey”
Eğer application.properties kullanıyorsak dosya ismini vermeye gerek yok. Şöyle yaparız
mvn jasypt:encrypt -Djasypt.encryptor.password=”secretkey”
Uygulamayı JASYPT_ENCRYPTOR_PASSWORD ortam değişkenine, pluginde kullanılan secret key  değerini atayarak çalıştırmak gerekir. Sanırım dosya daha sonra şu hale geliyor. Şifrelenen şeyler ENC(...) haline geliyor
spring:
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: none
  datasource:
    name: standalone-client
    url: jdbc:h2:mem:standalone-client
    username: client-user
    # password is client-password
    # provide sample-password as jasypt.encryptor.password to decrypt
    password: ENC(byF912frlZUCifdrOFlGJ8LTjWpVIutKtzU0St2X/hZ9sqRp9kOsg5Se8FVxshFu)
    driverClassName: org.h2.Driver
  h2:
    console:
      enabled: true
  application:
    name: standalone-client

management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

logging:
  level:
    root: info




Hiç yorum yok:

Yorum Gönder