Photo by Meritt Thomas on Unsplash
Latar Belakang
Sudah pada umumnya sebuah aplikasi melakukan koneksi ke database apapun itu vendor database nya seperti MySQL, PostgreSQL, Oracle, SQlServer dan lain-lain.
Tapi kita sebagai programmer, kadang lupa untuk mengamankan data-data credentials seperti password akses ke database di level, dev, sit, uat atau bahkan production.
Untuk itu, kita perlu mengamankan password database tersebut dengan cara melakukan enkripsi password tersebut, salah satu library nya yaitu Menggunakan Jasypt (Java Simplified Encryption) yang bisa kalian dapatkan di sini http://www.jasypt.org/. Bagaimana cara menggunakannya, yuk kita bahas sama-sama disini…
Prasyarat
Dalam artikel ini tools yang penulis gunakan yaitu :
JDK 1.8 (Bisa menggunakan versi di atas ini)
IDE : IntelliJ IDEA (bisa menggunakan Eclipse atau Netbeans)
Maven 3
MySQL 5.7
Download Jasypt menggunakan link diatas
Lets Rock …
Buat sebuah projek baru Spring boot di https://start.spring.io/ dengan spesifikasi sebagai berikut :
Spring Boot versi 2.2.1.RELEASE
Spring Data JPA
Spring Web
MySQL Connector
Dbeaver DB Tools
kemudian generate dan yang terakhir tambahkan dependensi berikut
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>LATEST</version>
</dependency>
Lalu buat sebuah database menggunakan Dbeaver, misalnya nama database nya db_tasks dan buat sebuah tabel category
CREATE TABLE category
(
category_id
BIGINT(20) NOT NULL AUTO_INCREMENT,
name
VARCHAR(255) NULL DEFAULT NULL,
PRIMARY KEY (category_id
)
)
dan inputkan sembarang nilai ke dalam tabel tersebut.
Inputkan sembarang nilai
Buka IDE dan buat sebuah entity class Category sebagai berikut :
@Entity
@Table(name = "category")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.*IDENTITY*)
private long categoryId;
private String name;
public Category() {
}
public Category(long categoryId, String name) {
this.categoryId = categoryId;
this.name = name;
}
public long getCategoryId() {
return categoryId;
}
public void setCategoryId(long categoryId) {
this.categoryId = categoryId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Category{" +
"categoryId=" + categoryId +
", name='" + name + '\'' +
'}';
}
}
Lalu, untuk komunikasi ke database, kita buatkan interface repository nya dengan nama CategoryRepository
public interface CategoryRepository extends JpaRepository<Category, Long> {
}
di Main class nya, buatkan sebuah objek CategoryRepository dan tambahkan interface CommandLineRunner lalu implementasikan method run .
@SpringBootApplication
public class SecurityApplication implements CommandLineRunner {
@Autowired
private CategoryRepository categoryRepository;
public static void main(String[] args) {
SpringApplication.*run*(SecurityApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
System.*out*.println("Categori "+ categoryRepository.findAll());
}
}
langkah terakhir, buka command prompt dan masuk ke folder jasypt yang sudah kalian dowload, kemudian ketikan script berikut
encrypt.bat input=”root” password=dev-env algorithm=PBEWITHMD5ANDDES
encrypt.bat input=”root”, adalah password database yang ingin kita enkripsi, di sini password mysql saya adalah root (tidak direkomendasikan ya hehehe menggunakan password ini)
password=dev-env, adalah semacam key yang akan disertakan nantinya di application.properties
algorithm=PBEWITHMD5ANDDES, algoritma enkripsi yang digunakan
jika berhasil maka tampilannya adalah sebagai berikut.
yang perlu kita perhatikan adalah bagian bawah nya (OUTPUT) yaitu ncvDtFBZQBG3GYsGE0sbbg== adalah plaintext yang sudah kita encrypt. Untuk menggunakna nya yaitu ditambahkan ENC(..) sehingga menjadi
ENC(ncvDtFBZQBG3GYsGE0sbbg==)
Buka file application.properties lalu tuliskan konfigurasi sebagai berikut :
spring.datasource.url=jdbc:mysql://localhost:3306/db_tasks
spring.datasource.username=root
spring.datasource.password=ENC(ncvDtFBZQBG3GYsGE0sbbg==)
jasypt.encryptor.algorithm=PBEWithMD5AndDES
jasypt.encryptor.password=dev-env
untuk bagian password kita menggunakan plainteks yang sudah dienkripsi tadi.
jasypt.encryptor.algorithm=PBEWithMD5AndDES
adalah metode algoritma yang kita pakai pada saat akan mengekipsi
jasypt.encryptor.password=dev-env
adalah key yang kita gunakan pada saat mengenkripsi,
Oke langkah terakhir adalah kita akan mencoba mengetest dengan cara menjalankan aplikasi tersebut.
dibagian terakhir kita lihat, kita berhasil fetch data dari tabel Category, itu berarti settingan application.properties kita sudah berhasil.
Did you find this article valuable?
Support Teten Nugraha by becoming a sponsor. Any amount is appreciated!