| 비밀번호 정책에 대하여
- Spring Security의 BCrypt로 비밀번호를 암호화한 경우 원본 비밀번호는 찾을 수 없다. (보안 때문)
- 이건 다른 언어를 사용한 경우에도 마찬가지인데,
- 대다수의 사이트는 비밀번호를 못 찾으면, 원본 비번을 알려주지 않고 초기화를 하도록 되어 있다.
- 오늘 수업에서는 메일 링크를 통해 비밀번호를 초기화하는 정책을 배웠는데, USE CASE 흐름은 다음과 같았다.
[비밀번호 초기화 USE CASE]
[1] 로그인 페이지에서, 비밀번호 찾기 페이지로 이동
[2] 비밀번호 찾기 페이지에서, 이름과 이메일을 작성후 전송(비밀번호 인증키 생성) --> 결과화면
[3] 본인 이메일에 비밀번호 재설정 페이지 링크가 날라감
[4] 24시간 내에 링크를 통해 비밀번호 재설정 페이지에서 비밀번호 재설정 --> 결과화면
[비밀번호 초기화 정책]
1. 비밀번호 찾기
- 비밀번호 찾기 페이지 작성한 이메일과 이름이 일치하지 않는 경우 실패 응답,
- 비밀번호 resetPasswordKey와 resetPasswordLimitDate를 db에 저장 후,
* resetPasswordKey : uuid 랜덤키
* resetPasswordLimitDate : 비밀번호를 요청한 시점의 + 1day
회원 이메일에 Get방식으로 비밀번호 재설정 페이지와 함께 resetPasswordKey전송
2. 비밀번호 재설정 키 확인
- 인증 메일의 링크에 적힌 resetPasswordKey가 존재하지 않거나,
resetPasswordLimitDate가 존재하지 않거나, 24시간 이전인 경우 실패 응답
3. 비밀번호 재설정
- 2를 체크한 후, resetPasswordKey 및 restPasswordLimitDate를 초기화,
password를 BCrypt로 암호화하여 수정
- 비밀번호 초기화 키란?
: 내 어플리케이션에서 요청한 비밀번호 초기화 키와 사용자가 메일로 받은 초기화 키가 일치하는지를 확인하는 것으로, 보안을 위한 절차이다.
- 비밀번호 초기화 기간이란?
: 초기화 기간 (ex. 하루) 내에 이메일로 요청한 초기화를 진행해야 한다는 것을 의미한다.
| 새롭게 배운 기술 / 정리할 사항
- 위의 비즈니스 로직에 대해서는, 따로 정리하려면 시간이 많이 걸려서 기술적인 부분만 정리하려고 한다.
- 오늘 새롭게 배운 기술적인 부분(또는 정리해야했던 부분)은 아래와 같다.
1. Thymeleaf 의 fragment를 통해 공통 메뉴 만들기
[1] 패키지를 fragment로 하고, 레이아웃 페이지를 하나 만들었다.
- | 예시 |
head를 공통화할 경우 | <head th:fragment="fragment-header"> |
body 또는 요소를 공통화할 경우 | <div th:fragment="fragment-body-menur"></div> |
<div th:fragment="fragment-body-menu">
// navigation 구현
</div>
[2] 공통 메뉴를 적용할 페이지에 아래와 같이 적용한다.
<div th:replace="/fragments/layout.html::fragment-body-menu"></div>
2. Redirect 와 Forward에 대해서
- 오늘은 잠깐 언급하는 식으로 아래와 같이 redirect에 대해서 배웠다.
- 이 부분은 JSP를 겉핧기로 배울 때에도 살짝 배운 내용인데, 솔직히 잘 이해가 가지 않았었다.
- 이번 기회에 한 번 두 개의 차이점을 정리해보려고 한다.
@Controller
public class 어떤컨트롤러{
@GetMapping("/")
public String goToSomewhere(){
return "redirect:/somewhere/page";
}
}
Redirect | Forward | |
URL의 변화 | O | X |
요청정보 전달 | X | O |
- Redirect : Client 요청 -> Sever에서 다른 URL로 이동 요청
-> URL 변경되며 Client가 새로운 요청 -> Server에서 처리 후 응답
* Redirect를 할 때엔, Data-binding을 Model을 통해 해주어야 한다.
- Forward : Client 요청 -> Server에서 URL변동 없이 요청사항을 다른 경로에게 위임 -> 해당 경로에서 처리 후 응답
[ 참고 및 출처 ]
부트캠프 수업 내용을 듣고 정리한 내용입니다.
Thymeleaf https://sgoho01.tistory.com/24
Redirect 와 Forward https://doublesprogramming.tistory.com/63
'Framework > 프로젝트로 스프링 이해하기' 카테고리의 다른 글
[LMS 만들기] JPA와 MyBatis로 회원 목록 구현 (1) | 2022.10.04 |
---|---|
[LMS 만들기] 관리자 로그인 구현 (2) | 2022.10.04 |
[LMS 만들기] 스프링 시큐러티를 이용한 로그인/로그아웃 (0) | 2022.10.03 |
[LMS 만들기] 회원가입 페이지 만들기 (0) | 2022.10.02 |
[LMS 만들기] 스프링 컨트롤과 주소 매핑 (0) | 2022.09.30 |