본문 바로가기
개발

Springboot PasswordEncoder 등록

by 개발자종혁 2021. 4. 5.
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

댓글