
Spring Boot와 Jasypt를 이용한 간단한 암호화 예제입니다.
애플리케이션 설정 파일에 포함된 민감한 정보를 암호화해서 안전하게 관리하는 방법을 다뤄봅니다.
이 예제에서는 Spring Boot와 Jasypt를 활용해 암호화된 값을 설정 파일에 저장하고, 이를 복호화하는 간단한 방법을 소개합니다.
동영상 🎬
소스 💻
application.yml
server:
port: 9090
servlet:
context-path: /
encoding:
charset: UTF-8
enabled: true
force: true
spring:
thymeleaf:
enabled: true
cache: false
devtools:
livereload.enabled: true
restart.enabled: true
datasource:
driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
url: ENC(암호화값)
username: ENC(암호화값)
password: ENC(암호화값)
jasypt:
encryptor:
# JasyprtConfig에서 만든 빈
bean: jasyptStringEncryptor
property:
prefix: ENC(
suffix: )
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.3.10'
id 'io.spring.dependency-management' version '1.1.7'
}
group = 'com.lsy'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
// Logging
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
// jasypt
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
java 소스
JasyprtConfig
package com.lsy.jasyptsimple.config;
import com.lsy.jasyptsimple.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Slf4j
public class JasyprtConfig {
// vm 옵션으로 전달받은 개인키
@Value("${jasypt.password}")
private String jasyptPassword;
@Bean(name="jasyptStringEncryptor")
public StringEncryptor stringEncryptor() {
// vm 옵션으로 전달받은 개인키로 암호화 후 그 객체를 반환해서 빈으로 등록
StringEncryptor encryptor = StringUtils.getEncryptor(jasyptPassword);
log.info("encryptor :: {}", encryptor);
return encryptor;
}
}
StringUtils
package com.lsy.jasyptsimple.utils;
import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
public class StringUtils {
// 인자값으로 받은 키값으로 암호화 후 그 객체 반환
public static StringEncryptor getEncryptor(String key) {
// Config
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(key); // 암호화 키
config.setAlgorithm("PBEWithMD5AndDES"); // 암호화 알고리즘
config.setKeyObtentionIterations("1000"); // 반복할 해싱 횟수
config.setPoolSize("1"); // 인스턴스 pool
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); // salt 생성 클래스
config.setStringOutputType("base64"); // 인코딩 방식
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
encryptor.setConfig(config);
return encryptor;
}
}
애플리케이션 실행 시 vm option 추가
-Djasypt.password={개인키로 사용할 해시값}
개인 스터디 기록을 메모하는 공간이라 틀린점이 있을 수 있습니다.
틀린 점 있을 경우 댓글 부탁드립니다.
Spring Boot + Redis 캐싱 구현하기 (테스트 영상 & 소스 코드 포함)
Redis를 활용한 캐싱 구현! (짧고 간단한 영상)역시나 레디스 공부한 것 까먹기 싫어 기록으로 남긴다.동영상소스application.ymlserver: port: 9090 servlet: context-path: / encoding: charset: UTF-8 enabled: true force: tru...
yaga.tistory.com
Spring Boot + JWT로 인증 시스템 구현 (테스트 영상 & 소스 코드 포함)
springBoot와 JWT를 이용한 인증 서버를 간단히 구축해봤다.메타코딩님의 "스프링부트 시큐리티 - JWT"를 보고, 이를 바탕으로 스스로 복기하며 학습한 내용을 기록으로 남긴다.동영상 🎬 JwtAuthorizati...
yaga.tistory.com
'IT > Live Coding' 카테고리의 다른 글
RoboPOJOGenerator로 외부 API JSON 쉽게 자바 객체로 변환하기 (테스트 영상 & 소스코드 포함) (0) | 2025.04.07 |
---|---|
Spring Cloud Gateway + API 서버 연동 예제 🚀 (테스트 영상 & 소스코드 포함) (0) | 2025.04.01 |
Spring Boot + JWT로 인증 시스템 구현 (테스트 영상 & 소스 코드 포함) (0) | 2025.03.22 |
[Android, Kotlin] Jetpack Compose와 Glance로 간단한 위젯 구현(영상 & 코드 포함) (0) | 2025.03.16 |
Spring Boot + Redis로 요청 제한 (테스트 영상 & 소스 코드 포함) (1) | 2025.03.09 |
댓글