오늘은 회원가입시 비밀번호 암호화해서 DB에 저장, 로그인시 DB에 암호화된 비밀번호와 사용자가 입력한 비밀번호를 비교하는 matches, controller의 기능을 분산할 service, dto 서블릿을 spring container에 등록할 @Component에 대해 배웠다.
1) 먼저 암호화를 위한 spring security 라이브러리를 pom.xml dependency로 추가하고 servlet-context에서 빈 생성을 해준다.
2) 그리고 컨트롤러에서 @Autowired를 통해 PasswordEncoder 인터페이스의 객체를 가져온다. 암호화를 구현하는 클래스 BCryptPasswordEncoder를 직접 가져와도 되지만 다형성을 통해 BCryptPasswordEncoder 클래스는 PasswordEncoder 인터페이스를 구현하기에 인터페이스 객체로 접근 가능하다.
3) controller의 기능 분배를 위한 service, dto 서블릿을 생성한다. 이에 접근하기 위해 new를 통한 새로운 객체 생성이 아닌 @Autowired를 사용해서 spring container에 존재하는 객체를 가지고 온다. 이를 위해 service, dto 클래스에 @Component를 사용한다. @Component를 사용하면 spring container에 서블릿들이 올라오게 되고 @Autowired가 올라온 서블릿을 자동으로 연결해준다. 암호화를 살펴보면 encode 메소드를 통해 암호화를 진행하게 된다.
4) 회원가입 페이지에서 회원가입을 진행하고 DB에 입력된 비밀번호를 확인해본다. 암호화된 패스워드가 DB에 들어간걸 알 수 있다.
5) 이제 로그인시 사용자가 입력한 비밀번호와 DB에 저장된 암호화된 비밀번호를 비교하기 위해 matches 메소드를 사용한다.