
오늘의 실습 목표는 "비밀번호 관리 기능 만들어보기!" 입니다.
본 게시글에서 다루는 사항은 비밀번호 관리 기능을 구현하기 위해 DB(Tables), API를 기획/설계하는 과정입니다.
DB
- Schema: web-app - Table Name: admin_user_pw_history - Table Objectives: 관리자포털 사용자/직원의 비밀번호 정보 변경 이력이 저장되는 공간 |
||||
NAME | NAME_KOR | TYPE | NOT NULL | NOTES |
employee_no | 직원번호 | VARCHAR(6) | V | * PK |
no | 순번 | INT | V | * PK |
register_employee_no register_date_time update_employee_no update_date_time |
등록직원번호 등록일시 수정직원번호 수정일시 |
VARCHAR(6) DATETIME VARCHAR(6) DATETIME |
V V V V |
|
current_pw | 현재 비밀번호 | TEXT (Crypt) | V | |
previous_pw_1 | 이전 비밀번호 (1번째) | TEXT (Crypt) | ||
previous_pw_2 | 이전 비밀번호 (2번째) | TEXT (Crypt) | ||
pw_trial_state | 비밀번호 시도 상태 | CHAR(1) | V | 0: 초기 상태 1-4: 시도 횟수 5: Lock > 초기화 필요 |
temporary_pw_state | 임시 비밀번호 여부 | CHAR(1) | V | N: No (Default) Y: Yes |
API
Summary
ACTION | API | PURPOSE |
Create / POST | /admin-web/user/password | 관리자포털 사용자 비밀번호 변경 - 관리자포털 사용자 비밀번호 이력 테이블에 신규 행 추가 - 관리자포털 사용자 정보(admin_user_info) 테이블의 비밀번호 관련 컬럼 정보 수정 |
Read / GET | /admin-web/user/password | 관리자포털 사용자 비밀번호(현재, 1/2번째 전) 정보 조회 |
Detail
[POST] /admin-web/user/password
관리자 포털의 사용자가 비밀번호 변경시 본 API가 호출되며, 아래 로직을 순차적으로 수행합니다.
- 관리자 포털 사용자 비밀번호 이력(admin_user_pw_history) 테이블에 아래 정보 추가
- 현재 비밀번호(current_pw): 사용자가 입력한 변경할 비밀번호로 설정
- 1번째 전 비밀번호(previous_pw_1): 직전 순번의 현재 비밀번호로 설정
- 2번째 전 비밀번호(previous_pw_2): 직전 순번의 1번째 전 비밀번호로 설정
- 비밀번호 시도 상태(pw_trial_state): 사용자가 로그인한 횟수로 설정
- 5번 시도시 Lock 상태를 의미하며, 관리자에게 임시비밀번호 발급 요청하여 본 필드가 초기화되어야 함
- 임시 비밀번호 발급 여부(temporary_pw_state): 디폴트로 설정된 N(o)로 설정
- 관리자의 사용자 관리 화면에서 임시비밀번호 발급시 Y(es)로 설정
- 관리자 포털 사용자 정보(admin_user_info) 테이블에 비밀번호 관련 필드 정보 수정
- 직원 비밀번호(employee_pw): 사용자가 입력한 변경할 비밀번호로 설정
- 직원 비밀번호 만료일(employee_pw_exp_date): 사용자가 비밀번호를 변경한 일자 기준으로 60일 이후로 지정
[GET] /admin-web/user/password
관리자 포털의 사용자가 설정 화면으로 접근시 본 API가 호출되며, 아래 로직을 순차적으로 수행합니다.
- 관리자 포털 사용자 비밀번호 이력(admin_user_pw_history) 테이블에서 최근 비밀번호 3종 획득
- 현재 비밀번호(current_pw)
- 1번째 전 비밀번호(previous_pw_1)
- 2번째 전 비밀번호(previous_pw_2)
예정 사항
비밀번호 테이블과 관련하여 단순하게 GET/POST 기능 외에도 아래의 기능을 구현할 수 있습니다.
향후에 로그인 기능 구현시 추가할 API입니다.
- 로그인할 때 사용자 정보 정합성을 확인하기 위해 아래 두 테이블의 비밀번호 필드의 값 일치 여부 기능
- 관리자 포털 사용자 정보(admin_user_info)의 직원 비밀번호(employee_pw)
- 관리자 포털 사용자 비밀번호 이력(admin_user_pw_history)의 현재 비밀번호(current_pw)
- 관리자 포털의 사용자 관리 화면에서 특정 사용자에게 임시 비밀번호 발급 기능
- (발급) 기본적인 비밀번호 변경 로직([POST] /admin-web/user/password)과 동일하되, 아래 필드에 대해서만 값을 다르게 설정
- 임시 비밀번호 여부(temporary_pw_state): Y
- (사용) 로그인 시 임시 비밀번호 여부(temporary_pw_state)가 Y인 경우, 비밀번호 변경부터 진행하도록 팝업
- 미 변경시 이후 과정 진행 불가
- (발급) 기본적인 비밀번호 변경 로직([POST] /admin-web/user/password)과 동일하되, 아래 필드에 대해서만 값을 다르게 설정
- 비밀번호 시도 상태(pw_trial_state) 값이 5이면, 로그인 시도 횟수를 초과한 경우로 로그인 불가하도록 Lock 처리

'Programming > Spring Boot' 카테고리의 다른 글
"No property found for type Traversed path" 오류 해결 방법 (0) | 2023.02.23 |
---|---|
"your MySQL server version for the right syntax to use near 'N not null" 오류 해결 방법 (0) | 2023.02.22 |
[실습] 스프링부트(Spring Boot)로 회원 관리 기능 구현하기 - REST API 테스트하기 (0) | 2023.02.15 |
[실습] 스프링부트(Spring Boot)로 회원 관리 기능 구현하기 - REST API 구현하기 (0) | 2023.02.14 |
[실습] 스프링부트(Spring Boot)로 회원 관리 기능 구현하기 - DB, API 기획/설계하기 (0) | 2023.02.13 |
댓글