티스토리 뷰
로그인을 하기에 앞서, 현재 우리의 홈페이지에서 회원가입을 진행하면 폼에 입력된 정보가 암호화 되어 데이터베이스에 저장되는 것 아니라 입력값 그대로 저장된다.
우리는 입력값 그대로를 데이터베이스에 저장하는 것이 아니라 해쉬(Hash)형태로 변환 후 DB에 저장할려고 한다.
시큐리티는 어떤 로직을 가지고 있는지 살펴보면
- 로그인을 요청한다.
- 시큐리티가 지켜보고 있다가 파라미터로 전달된 username, password를 가로챈다.
- 가로챈 파라미터로 로그인 진행이 완료된다.
- 시큐리티가 가지고 있는 전용 세션에 유저정보를 저장한다.
- 우리는 세션에 저장되어 있는 유저정보를(IOC)를 DI(의존성주입)을 사용하여 필요할 때 마다 사용한다.
여기서 중요한 점은 시큐리티 세션에는 우리가 만들어놓은 User 오브젝트를 저장하지 못하고 UserDetails 타입을 가진 정보만 저장할 수 있기 때문에 해결하기 위해 2가지 방법을 제시할 수 있다.
- userDetails가 user 오브젝트를 extends(상속)하여 같은 타입으로 사용한다.
- userDetails의 타입으로 맞춰서 진행한다.
시큐리티는 기본적으로 '1234' 처럼 암호화 되어 있지 않은 취약한 비밀번호로 회원가입을 시킬 수 없고 무조건 해쉬화를 진행해야 한다.
그럼 여기서 해쉬는 뭘까? 예를 들어 설명하면 평문의 비밀번호 "1234jmw"를 해쉬 알고리즘을 이용하여 고정된 길이의 암호화된 문자열로 바꿔 버리는 것을 말한다.
본격적으로 해쉬화를 시작해보자.
시큐리티가 내포하고 있는 BCryptPasswordEncoder을 활용해서 해쉬화를 진행할 것이다.
밑의 사진 처럼 구현을 해주면 우리는 앞으로 encodePWD를 통해서 BCryptPasswordEncoder메소드를 자동으로 호출 할 수 있게 되고
BCryptPasswordEncoder에 내장되어 있는 encode()를 사용하기 위해 encodePWD.encode()와 같이 간편하게 사용할 수 있게 된다.
자 이제 그러면 모든것이 준비되었으니 회원가입을 담당하는 UserService에서 작업을 진행해봅시다~
- @AutoWired 를 통해서 BCryptPasswordEncoder 의존성 주입
- User 객체에서 받아온 Password값을 임의의 변수에 저장
- 저장된 임의의 변수를 BCryptPasswordEncoder의 encode() 메소드를 통해서 해쉬화.
- 해쉬화된 Password를 가지고 회원가입!
완벽하게 해쉬화되서 password가 들어간것을 확인할 수 있다!
'JavaProject > Spring Boot' 카테고리의 다른 글
Spring Boot(게시글작성) (0) | 2022.10.03 |
---|---|
Spring Boot(Security login#4) (0) | 2022.09.28 |
Spring Boot(Security login #2) (0) | 2022.09.25 |
Spring Boot(Security login #1) (0) | 2022.09.23 |
Spring Boot(전통적인 로그인 구현) (0) | 2022.09.18 |