[Spring Security] 비밀번호 암호화(PasswordEncoder)

dondonee·2024년 2월 24일
0
post-thumbnail

비밀번호 암호화

스프링 시큐리티에서 제공하는 PasswordEncoder를 사용하여 사용자의 비밀번호를 암호화하여 보다 안전하게 저장할 수 있다.


패스워드 인코더 추가

@Configuration  
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

스프링 시큐리티 설정 파일에서 PasswordEncoder를 빈으로 등록해준다. 구현체로는 BCryptPasswordEncoder를 사용한다.



패스워드 인코더 사용

회원가입

@Autowired
PasswordEncoder pwEncoder;

회원가입을 처리하는 컨트롤러에 패스워드 인코더를 @Autowired로 추가해준다.


@RequestMapping("/memRegister.do")
public String memRegister(Member m, ...) {
    
    //...
	//회원가입 폼 검증 => 올바른 요청이면 DB에 저장
	String encyptPw = pwEncoder.encode(m.getMemPassword());  //비밀번호 암호화
	m.setMemPassword(encyptPw);             //객체에 암호화된 패스워드 세팅
	int result = memberMapper.register(m);  //회원을 DB에 등록
    
    //...
    //회원가입이 성공하면 => 로그인 처리하기
            return "redirect:/memLoginForm.do";
}

마이바티스 매퍼를 통해 DB에 비밀번호를 저장하기 전, 패스워드 인코더의 encode()메서드를 통해 사용자로부터 입력받은 비밀번호를 암호화한 뒤 DB에 저장한다.

가입이 완료된 뒤 DB를 확인해보면 사용자가 입력한 비밀번호 그대로가 아닌 암호화되어 추정 불가능한 상태로 저장되어 있다. 가입한 사용자가 로그인할 때 입력한 비밀번호와 DB에 저장된 암호화된 비밀번호가 일치하는지 확인할 때는 패스워드 인코더가 제공하는 메서드를 사용하면 된다.



로그인(인증)

<select id="memLogin" parameterType="kr.board.entity.Member" resultMap="memberMap">
  select * from mem_stbl mem LEFT OUTER JOIN mem_auth auth on
      mem.memID=auth.memID where mem.memID=#{memID}
</select>

사용자가 로그인 요청을 하면 DB에서 로그인 ID와 일치하는 회원 정보를 검색해온다. 로그인 비밀번호는 컨트롤러에서 체크한다.


Member mvo = memberMapper.memLogin(m);
if (mvo != null && pwEncoder.matches(m.getMemPassword(), mvo.getMemPassword())) {}

컨트롤러에서 사용자가 입력한 로그인 비밀번호가 올바른지 확인하기 위해서는 패스워드 인코더의 matches() 메서드를 사용하면 된다.




🔗 Reference

0개의 댓글