simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • null
  • 자바메모리구조
  • 참조변수
  • scanner #next() #nextLine()
  • 404
  • 스프링
  • 자바
  • 자바프로그래밍
  • JVM메모리구조
  • 자바프로그램
  • 컨트롤러
  • 참조타입
  • controllerTest

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

Framework/프로젝트로 스프링 이해하기

[LMS 만들기] 비밀번호 초기화 요청 및 메일 링크를 통한 초기화

2022. 10. 4. 03:53

|  비밀번호 정책에 대하여

- 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
    'Framework/프로젝트로 스프링 이해하기' 카테고리의 다른 글
    • [LMS 만들기] JPA와 MyBatis로 회원 목록 구현
    • [LMS 만들기] 관리자 로그인 구현
    • [LMS 만들기] 스프링 시큐러티를 이용한 로그인/로그아웃
    • [LMS 만들기] 회원가입 페이지 만들기
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바