-
Spring Boot: 세션 기반 로그인/회원가입 + 인터셉터 권한 제어(RBAC) 구현Side Project 2026. 1. 3. 20:38



1. 목표(요구사항)
- 로그인/회원가입 기능 구현
- 인증 방식: HttpSession 기반(Session-based Authentication)
- 권한 방식: 역할 기반 인가(RBAC)
- 역할(ROLE)
- ROLE_ADMIN: 전체 기능 가능
- ROLE_SALES: 프로젝트 관리(등록/수정/삭제) 가능
- ROLE_SUPPORT: 기술지원(등록/수정/삭제) 가능
- 비밀번호 저장: BCrypt 해시(password_hash)
2. DB 설계(users)
- users
- user_id (PK)
- login_id (UNIQUE 권장)
- password_hash (BCrypt 해시 저장)
- name
- role (ROLE_ADMIN / ROLE_SALES / ROLE_SUPPORT)
- created_at, updated_at, deleted_yn
포인트
- 평문 비밀번호 저장 금지 → 로그인 검증은 BCrypt.checkpw()로 처리
3. 화면 구성(Thymeleaf)
- /login : 로그인 화면
- /join : 회원가입 화면
- input: loginId, password, passwordConfirm, name, role
- 헤더(공통)
- 비로그인: 로그인/회원가입 노출
- 로그인: 로그아웃 노출
- (선택) role에 따라 버튼/메뉴 노출 분기
4. 회원가입 흐름 (Controller → Service → DAO → SQL)
4-1) JoinController
- GET /join : 회원가입 화면 렌더링
- POST /join : 회원가입 처리 요청
4-2) JoinService 핵심 로직
- 입력값 검증(아이디/비번/비번확인/이름)
- 아이디 중복 체크
- BCrypt.hashpw()로 비번 해시 생성
- role 화이트리스트 검증(ROLE_*만 허용)
- DB INSERT
4-3) MyBatis Mapper
- findByLoginId
- insertUser
5. 로그인 흐름 (세션 저장이 핵심)
5-1) LoginController
- GET /login : 로그인 화면
- POST /login : 로그인 처리
5-2) LoginService 핵심 로직
- login_id로 사용자 조회
- BCrypt.checkpw(입력비번, password_hash) 검증
- 성공 시 세션에 LOGIN_USER 저장
→ 이후 인증의 기준이 됨
6. 인터셉터 기반 인증/인가
6-1) LoginInterceptor (인증)
- 세션에 LOGIN_USER 없으면 /login으로 리다이렉트
- 즉 “로그인 상태”의 판단 기준은 LOGIN_USER 존재 여부
6-2) RoleActionInterceptor (인가/RBAC)
- GET(조회)은 통과
- POST(등록/수정/삭제)는 role 체크
- ADMIN: 전부 통과
- SALES: /support/project/** POST만 통과
- SUPPORT: /support/support/** POST만 통과
- 권한 없으면 alert로 안내 후 이전 페이지로 이동(또는 forbidden 페이지)
7. 테스트 시나리오
- ADMIN 로그인
- 공지/프로젝트/기술지원 등록/수정/삭제 모두 가능
- SALES 로그인
- 프로젝트 등록/수정/삭제 가능
- 기술지원 등록/삭제 시 “권한 없음” 처리
- SUPPORT 로그인
- 기술지원 등록/수정/삭제 가능
- 프로젝트 등록/삭제 시 “권한 없음” 처리
8. 트러블슈팅(짧게)
- Required parameter 'role' is not present
→ HTML name="role"과 컨트롤러 파라미터명이 불일치(roles → role)였음
→ name/RequestParam 통일로 해결
9. 마무리(다음 개선 포인트)
- 회원가입에서 role 선택 제거(운영용): 기본 ROLE_SUPPORT로 가입
- 관리자 페이지에서 role 변경 기능 추가
- 버튼/메뉴를 role에 따라 숨김 처리(UX 개선)
- 예외 처리(403/404) 공통화
'Side Project' 카테고리의 다른 글
기술지원 관련 사이드 프로젝트 진행상황 (0) 2026.01.05 기능 추가(메모) (0) 2025.12.30 기술지원 사이드 프로젝트 진행 (~2025-12-30) (0) 2025.12.30 기술지원 웹페이지 진행 상황(~2025-12-23) (2) 2025.12.23 기술지원 앱 사이드 프로젝트 (2025-12-19) (0) 2025.12.19