본문 바로가기
Dev/SpringBoot

21. [SpringBoot] 간단하게 비밀번호 암호화해보기

by VIPeveloper 2020. 10. 1.
반응형

1. 서론

- 회원가입 로직을 구현하던 중 평문 비밀번호를 그대로 저장하는 것을 알게 되었고, Spring security 를 이용하여 암호화하는 방법을 학습해야겠다고 생각했다.

평문 비밀번호

2. 본론

의외로 간단하다. spring-security 의존성이 필요하다.

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-security</artifactId>
</dependency>

그리고 springsecurity 환경설정을 진행해준다.

import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@EnableWebSecurity
public class SpringSecurity extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .csrf().disable()
                .cors().disable()
                .headers().frameOptions().disable();
    }

    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
}

passwordEncoder를 빈으로 등록해주면, 어디에서든 @Autowired 어노테이션을 이용해서 가져올 수 있다.

이제 서비스 부분에 적용해보자

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;

@Service
public class MemberService {

    @Autowired
    private MemberRepository memberRepository;

    @Autowired
    private PasswordEncoder passwordEncoder;

    @Transactional
    public void signUpUser(Member member) {
        member.setPassword(passwordEncoder.encode(member.getPassword()));
        memberRepository.save(member);
    }
}

평문으로 된 비밀번호를 가져와서 passwordEncoder 내장함수인 encode로 해싱한 후 저장해주었다.

3. 결론

암호화된 비밀번호

암호화가 잘 되었다.

반응형