728x90
설정
build.gradle
...
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-web'
}
WebSecurityBeanFactory.java
import com.google.common.base.Charsets;
import com.google.common.hash.Hashing;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.password.DelegatingPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class WebSecurityBeanFactory {
@Bean
public PasswordEncoder passwordEncoder() {
// encoding 기본형
String idForEncode = "sha2";
Map<String, PasswordEncoder> encoders = new HashMap<>();
encoders.put("sha1", new PasswordEncoder() {
@Override
public String encode(CharSequence rawPassword) {
String encrypted =Hashing.sha1().hashString(rawPassword.toString(), Charsets.UTF_8).toString();
return encrypted;
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return encode(rawPassword).equals(encodedPassword);
}
});
encoders.put("sha2", new PasswordEncoder() {
@Override
public String encode(CharSequence rawPassword) {
String encrypted =Hashing.sha256().hashString(rawPassword.toString(), Charsets.UTF_8).toString();
return encrypted;
}
@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return encode(rawPassword).equals(encodedPassword);
}
});
return new DelegatingPasswordEncoder(idForEncode, encoders);
}
}
PasswordEncoder를 이렇게 여러 개 등록하면 좋은점?
- 후에 암호화 방식을 바꿀때, 이전의 암호화 방식이 그대로 작동하는 이점이 있음.
- 현재 기본형은 sha2지만, 만일 Bcrypt를 추가하여 바꾸어도 이전의 sha2를 사용한 비밀번호가 문제 없이 작동함.
728x90
'개발' 카테고리의 다른 글
프로메테우스 관련 시작 (0) | 2021.04.16 |
---|---|
SPA(Single Page App)와 CSR(Client side rendering) (0) | 2021.04.06 |
DDD란? (0) | 2021.04.05 |
SHA1 vs SHA2 차이점 (0) | 2021.04.05 |
AES256/ base64 암호화 with java (0) | 2021.04.02 |
댓글