암호화 해시는 PasswordEncoder를 DaoAuthenticationProvider로 설정하면 된다.
SecurityConfig.java
@Configuration@EnableWebSecuritypublicclassSecurityConfigextendsWebSecurityConfigurerAdapter{@AutowiredprivateUserDetailsServiceuserDetailsService;...@Overrideprotectedvoidconfigure(AuthenticationManagerBuilderauth)throwsException{// 사용자 세부 서비스를 설정하기 위한 오버라이딩이다.auth.userDetailsService(userDetailsService)// 로그인 관리// 프로바이더 하나 만들기.and().authenticationProvider(authenticationProvider());// Password Encoding 관리}// authenticationProvider()구현@BeanpublicAuthenticationProviderauthenticationProvider(){DaoAuthenticationProviderauthProvider=newDaoAuthenticationProvider();authProvider.setUserDetailsService(userDetailsService);// 주입된 UserDetailsService에 passwordEncoder를 설정한다.authProvider.setPasswordEncoder(passwordEncoder());returnauthProvider;}// passwordEncoder() 구현// 암호를 해시시키는 경우 BCryptPasswordEncoder를 사용한다. @BeanpublicPasswordEncoderpasswordEncoder(){returnnewBCryptPasswordEncoder();}}
BCryptPasswordEncoder 클래스를 살펴보면,
encode시 솔트를 사용하는 것을 볼 수 있다.
matches라는 메서드를 사용하여, 입력된 비밀번호와 DB에 저장된 값을 비교 할 수있다.
[2] service 에서 passwordEncoder 처리하기
회원가입 시 Dao를 가기위해 거쳐가는 Service의 joinUser메소드에서 passwordEncoder를 처리한다.