실제 서비스에서는 비밀번호와 같이 치명적일 수 있는 데이터는 암호화해서 저장해야한다.
비밀번호를 예제로 암호화에 대해서 알아보도록 하겠다.
생각해야 할 로직은 크게 아래 두 가지로 나눌 수 있다.
1. 가입할 때 비밀번호 암호화
2. 로그인할 때 매칭하는 방법
바로 예제를 보도록 하겠다.
비밀번호 암호화를 도와줄 무언가가 필요하다.
필자는 Spring Security에서 제공해주는 BCryptPasswordEncoder를 사용해서 진행할 것이다.
사용할 BCryptPasswordEncoder를 빈으로 등록을 해준다.
암호화를 할 Class에서 @Autowired를 통해서 주입받는다.
실제 DB에 Insert하는 부분에서 BCryptPasswordEncoder가 제공해주는 encode를 통해서 암호화를 진행한다.
BCryptPasswordEncoder.encode의 특징은 똑같은 값을 넣어도 매번 다른값이 생성된다.
이것을 추후 검사를 진행할 때 주의해야한다.
여기까지 진행했다면 큰 로직중 1번을 끝낸것이다.
바로 2번 로그인할 때 매칭하는 방법에 대해서 알아보도록 하겠다.
필자는 Security를 이용하여 진행하였다.
Security를 따로 적용하지 않은분들은 verifyPassword 메소드를 사용하는 클래스에 집어넣고 똑같이 진행하면된다.
매칭할 때 주의해야할 점은 크게 2가지가 있다.
1. BCryptPasswordEncoder.encode는 똑같은값을 넣어도 매번 다른값을 반환한다. 그렇기 때문에 equals메소드를 통하여 비교하게 된다면 비밀번호를 제대로 입력했는데 실패할 확률이 생긴다. BCryptPasswordEncoder가 제공해주는 matches 메소드를 활용하자.
2. matches메소드는 1번째 파라미터로 사용자로부터 받은 암호화 되지않은 패스워드 2번째 파라미터로 암호화된 패스워드를 넘겨야한다. 순서를 바꾸거나 둘다 암호화해서 넘긴다면 로그인이 되지않는 경우가 발생될 수 있다.
'개발 > Spring' 카테고리의 다른 글
[Spring] java.lang.RuntimeException: Could not invoke method: .. defined in class ... so no params were used. (0) | 2020.03.30 |
---|---|
[Spring] API 설계시 주의사항 (0) | 2020.03.27 |
[Spring]class java.lang.String cannot be cast to class org.springframework.security.core.userdetails.User (0) | 2020.03.15 |
[Spring] Spring boot란 무엇인가 ? (0) | 2020.03.04 |
[Spring] Spring boot parent dependencyManagement (0) | 2020.03.03 |
댓글