-
[Spring] 세션 로그인 검증 방식 개선 제안Spring 2025. 4. 14. 13:13
Spring
Session 사용법
https://note8770.tistory.com/99
[Spring] 과제 - Trobleshooting Session을 이용한 로그인 유지.
🔍 트러블슈팅: 로그인 세션 체크가 중복되는 것 같을 때🧩 문제 상황로그인한 사용자인지 확인하기 위해 세션을 개별 API에서도 매번 확인하고 있었다.하지만 Filter에서도 이미 세션 체크를 하
note8770.tistory.com
이전 글에서 수정 할점이 있다.
필터에서 Session의 예외 처리하는데 굳이 또 체크하는 함수를 만든다?
✅ 기존 방식
public Long getUserId(@SessionAttribute(name = Const.LOGIN_USER, required = false) LoginResponseDto checked){ if(checked.getId() == null){ throw new NotAuthenticatedException("로그인 해주세요"); } return checked.getId(); }- 설명:
★ 컨트롤러에서 세션 정보를 직접 받아 로그인 여부를 확인하고, 예외를 수동으로 처리함.
- 문제점:
★ 이미 Filter에서 세션 유무를 통해 로그인 여부를 확인한다.
★ 모든 컨트롤러 메소드에서 위와 같은 반복 로직이 발생 → 낭비
★ White List에서 제외된 URI에 대해서는 필터에서 예외 처리를 하므로,
컨트롤러에서 중복 검증은 불필요한 오버헤드
🌟 개선된 방식
@SessionAtribute 주입 활용
@GetMapping("/some-api") public ResponseEntity<?> someApi(@SessionAttribute(name = Const.LOGIN_USER) LoginResponseDto user) { // 필터에서 로그인 보장되므로 null 체크 불필요 Long userId = user.getId(); // 이후 로직 처리 }- 장점:
★ @SessionAttribute로 로그인 유저 정보를 자동으로 받아 사용 가능
★ Null 체크, 예외 처리 중복 제거 → 간결하고 유지보수성 향상
★ 실질적인 로그인 검증은 Filter에서 진행되므로, 보안적으로도 안전
✅ 결론
★ 로그인 검증 Filter에서 일괄 처리한다.
★ @SessionAttribute로 DTO를 받아 필요한 정보만 활용하는 것이 가장 효율적이다.
★ 컨트롤러에서 로그인이 보장된 상태를 전제로 로직을 간결하게 구성하자.
'Spring' 카테고리의 다른 글
[Spring] 생명 주기 (0) 2025.04.15 [Spring] 이메일 인증 구현하기 (1) 2025.04.14 [Spring] Redis (0) 2025.04.14 [Spring] 과제 - Trobleshooting Session을 이용한 로그인 유지. (1) 2025.04.04 [Spring] SpringMVC (0) 2025.03.30
