일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 산술 연산자
- 객체
- 식별자
- @PreAuthorize("isAuthenticated()")
- 친절한 SQL
- SpringSecurity 로그인
- 이클립스 설치
- 자바의정석
- SQL튜닝
- 함수
- 오버라이딩
- 비교 연산자
- 연산자
- 예약어
- 오버로딩
- SpringSecurity 로그아웃
- 반복문
- StringBuffer
- 배열
- 논리 연산자
- java
- 인텔리제이 Web 애플리케이션
- 스프링시큐리티 로그아웃
- 객체지향
- 친절한 SQL 튜닝
- spring 게시판 삭제
- join
- 상속
- SQL 튜닝
- SQL
- Today
- Total
gi_dor
[error] application.properties 암호화 Jasypt 발생한 문제 본문
https://gi-dor.tistory.com/250
🔒 상황
기존에 설정한 application properties 암호화 설정에서
DB 이중화로 인해 master 와 replica 로 구분 후에 발생한 문제에 대해 기록하려고 한다
Application 실행 시 에 발생하는 문제...
🔒 원하는 결과
spring.datasource.master.password 에 바인딩되어 애플리케이션이 실행되야한다
🔒 해결방법
Spring 애플리케이션이 실행될 때 spring.datasource.master.password 속성을 바인딩할 수 없다는 것을 나타낸다
애플리케이션의 구성 파일에서 설정이 잘못되었거나 필요한 속성이 누락되었을 때 발생한다
1️⃣ 구성 파일 확인: 애플리케이션의 application.properties 또는 application.yml과 같은 구성 파일을 확인spring.datasource.master.password 속성이 올바른지 확인하기
2️⃣ 패스워드 설정: spring.datasource.master.password 속성이 데이터베이스 연결에 필요한 패스워드를 제공하는지 확인
3️⃣ 데이터베이스 구성 확인: 데이터베이스 서버가 실행 중이고 애플리케이션이 올바른 데이터베이스에 연결하려는지 확인
4️⃣ 스프링 부트 의존성 확인: 필요한 스프링 부트 의존성이 제대로 설정되었는지 확인.
종속성이 올바르게 해결되지 않으면 Spring이 데이터베이스 속성을 바인딩하는 데 문제가 발생할 수 있다고 한다.
@Bean("jasyptEncryptorDES")
public StringEncryptor stringEncryptor() {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(key); // 암호화키
config.setAlgorithm("PBEWithMD5AndDES"); // 알고리즘
config.setKeyObtentionIterations("1000"); // 반복할 해싱 회수
config.setPoolSize("1"); // 인스턴스 pool
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); // salt 생성 클래스
config.setStringOutputType("base64"); //인코딩 방식
encryptor.setConfig(config);
return encryptor;
}
@Bean("jasyptEncryptorDES") 이렇게 Jasypt 라이브러리의 암호화 방법 DES를 사용하는 Encryptor를
나타내는 빈등록 까지 했는데 나한테 왜그런걸까 ..
JasyptEncryptorConfigurationProperties .class
Jasypt 라이브러리를 사용하여 스프링 부트 애플리케이션에서 문자열을 암호화하는 데 사용되는 기본 빈의 이름을 지정하는 데 사용된다 → jasyptStringEncryptor 가 기본 default 이름 이라는 뜻이다
기본적으로 Jasypt Spring Boot Starter는 jasyptStringEncryptor 라는 이름의 빈을 사용하여 문자열을 암호화하는데
기본 빈의 이름을 변경할 수 있도록 하는 옵션을 제공한다고 한다.
bean 필드에 지정된 이름으로 빈을 재정의할 수 있으며. 암호화 빈의 이름을 변경할 수 있다
예를 들어, 이 필드를 " jasyptEncryptorDES "와 같이 설정하면
스프링 부트 애플리케이션은 "jasyptEncryptorDES" 라는 이름의 빈을 찾아서 문자열을 암호화할 것이다
위에서 Config 클래스에 @Bean("jasyptEncryptorDES") 이렇게 등록 했기 때문에 default 이름이 아닌 재정의된 이름으로 설정해서 그렇다고 한다. 그러므로 application.properties 에서 프로퍼티 암호화설정 빈을 등록 해줘야한다
## 프로퍼티 암호화 설정
jasypt.encryptor.bean=jasyptEncryptorDES
사실 가장 쉬운 방법은 이렇게 빈의 추가적인 이름을 없애버리면 위에 application.properties 값을 설정하지 않아도된다
@Bean
public StringEncryptor stringEncryptor() { }
'Back_End > Issue' 카테고리의 다른 글
[error] update 비밀번호 암호화 문제 (0) | 2024.04.29 |
---|---|
[error] localhost에서 리디렉션한 횟수가 너무 많습니다 (0) | 2024.04.16 |
[error] org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) (0) | 2024.04.15 |