🔍 Session 정보 이용하기
✏️ 1. 컨트롤러에서 HttpSession 클래스 이용하기
HttpSession 클래스를 파라미터로 받으면 session 정보를 사용할 수 있다.
✏️ 2. 필터 또는 인터셉터 이용하기
필자는 세션 정보를 거의 모든 요청 API에서 확인해야 한다. 따라서 Controller에서 session 정보를 불러오는 중복을 해결하기 위해 필터를 이용하였다.
@Component class SessionFilter( private val redisSessionRepository: RedisSessionRepository, ): OncePerRequestFilter() { val log = logger() override fun doFilterInternal( request: HttpServletRequest, response: HttpServletResponse, filterChain: FilterChain ) { val session = getSessionFromCookie(request) --- 1 if (session == null) { val sessionId = request.getSession(true).id --- 2 } filterChain.doFilter(request, response) } }
- 쿠키에 세션에 대한 정보가 있는지 확인한다.
- 세션이 없다면 새로운 세션을 생성한다. (세션이 생성될 때 저장소에 저장된다)
MyRedisSessionRepository는 다음처럼 되어 있다.
class MyRedisSessionRepository( ... ) { private val SESSION_PREFIX = "kmall:sessions:" private val PRODUCT_PREFIX = "product:" fun setSession(sessionId: String) { stringRedisTemplate.opsForSet().add(SESSION_PREFIX, sessionId) stringRedisTemplate.expire(SESSION_PREFIX, 3, TimeUnit.DAYS) } }
🔍 트러블 슈팅
SrpingSession Redis 트러블 슈팅
SpringBoot + vue.js를 이용한 커스텀 쿠키 받기