Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 개발
- 훈수 가능
- Redux
- 티스토리챌린지
- web-view
- php-1
- 오블완
- 부산 맛집 OPEN API
- 꿀팁 환영
- 코딩테스트
- 사업계획서
- expo
- 보안
- apk 빌드
- redux state값 유지
- python
- API 활용 신청
- 고고학 최고의 발견
- React
- 프로그래머스
- level3
- 블로그 뉴비
- url 랜더링
- 드림핵
- Dreamhack
- 창업 300
- 공공데이터 포털
- react-router-dom
- 새로고침
Archives
- Today
- Total
1223v
[SpringBoot] Spring Security 로그인 시, 세션 유지 안되는 현상 본문
(ver.스프링부트 3.x , 스프링 시큐리티 6)
문제 인식
Spring Security를 통해 세션방식 로그인 개발 진행 중, 로그인 시도 시 정상적으로 인증정보를 바인딩하고 있으나, 페이지 이동 시 인증정보가 없어지는 것을 발견했습니다.
이에 해결과정과 코드를 공유하고자 합니다.
기존 코드의 문제점은 다음으로 추측했었습니다.
SecurityContextPersistenceFilter란?
SecurityContextPersistenceFilter
- SecurityContextPersistenceFilter는 Spring Security에서 매우 중요한 필터 중 하나로, HTTP 요청이 들어올 때 SecurityContext를 세션에서 복원하고, 요청이 완료되면 SecurityContext를 세션에 저장하는 역할을 합니다.
- 이 필터는 기본적으로 SecurityContextHolder가 관리하는 인증 정보를 요청 사이에서 지속적으로 유지할 수 있도록 합니다. 만약 이 필터가 없으면, 인증 정보가 요청 간에 사라지며 세션을 통해 인증 정보를 유지할 수 없게 됩니다.
작동 방식
- 요청이 들어올 때: SecurityContextPersistenceFilter는 세션에서 SecurityContext를 가져와 SecurityContextHolder에 저장합니다. 이를 통해 인증 정보가 요청마다 재사용됩니다.
- 요청이 완료될 때: 요청이 완료되면 SecurityContext에 저장된 인증 정보를 다시 세션에 저장하거나, 인증 정보가 없으면 세션에서 제거합니다.
해결
http.addFilterBefore(new SecurityContextPersistenceFilter(), BasicAuthenticationFilter.class);
- BasicAuthenticationFilter.class: Spring Security에서 HTTP Basic 인증을 처리하는 필터입니다. SecurityContextPersistenceFilter는 이 필터보다 먼저 실행되어, 인증이 이루어지기 전에 세션에서 SecurityContext를 복원할 수 있도록 합니다.
고찰
아무래도 가장 큰 요인은 "특정 필터의 순서 문제" 라고 생각합니다.
Spring Security는 기본적으로 필터 체인을 통해 보안 관련 로직을 처리합니다. 특정 필터가 올바른 순서로 실행되지 않으면 인증 정보가 요청 간에 유지되지 않을 수 있습니다. SecurityContextPersistenceFilter를 적절한 위치에 추가함으로써 인증 정보가 세션을 통해 요청 간에 지속적으로 유지되고 복원되었기 때문에 문제가 해결된 것 같습니다.
SecurityContextPersistenceFilter는 인증 정보를 세션에서 복원하고 저장하는 역할을 하며, 필터 체인에서 올바른 위치에 추가되지 않으면 인증 정보가 제대로 유지되지 않을 수 있습니다.
addFilterBefore()를 통해 SecurityContextPersistenceFilter를 BasicAuthenticationFilter 앞에 추가하면 인증 정보가 세션에서 올바르게 복원되어 문제가 해결됩니다.
728x90
'개발 > 개발 고찰' 카테고리의 다른 글
Redis 데이터 분산 [redis 죽으면 어카노…?] (0) | 2025.02.05 |
---|---|
명확한 근거를 통한 불필요한 polling 점진적으로 제거하기(Long polling, SSE, Websocket)[feat.레디베리] (0) | 2024.10.31 |
[React] 음원, 녹음 동시 작업 실행 시, 녹음 품질 저하 문제 해결 및 고찰 (0) | 2024.09.23 |
단위테스트 적응기 (1) | 2024.07.16 |
인증 방식 선택에 대한 고민과 고찰 (Session vs Token)[Feat. 레디베리] (1) | 2024.07.03 |