24.05.17 18:25 작성
·
260
0
안녕하세요 강의 잘 보고 있습니다.
저는 지금 Rest API서버를 생성하고 인증을 하는 방식은 session으로 하고 session 저장소를 Redis로 옮겨 구현하고자 합니다.
그러나 강의와는 다르게 @EnableRedisHttpSession
어노테이션을 추가해도 Redis에 저장이 되지 않는 오류가 있는데 이를 어떻게 해결해야할지 모르겠어 질문을 드립니다.
Redis가 아닌 Memory에 저장을 하였을때는 정상 동작하였으며 디버깅을 통해 문제의 원인을 파악해본 결과 SecurityContextImpl
객체에 대한 직렬화를 수행해주는 클래스가 존재하지 않아 오류가 발생하는 듯 합니다.
혹시 이 문제에 대해 도움을 받을 수 있을까요?
문제상황을 작성해놓은 포스팅과 프로젝트의 압축파일을 첨부해드리도록 하겠습니다.
추가로 프로젝트 환경은 로컬에서 진행하였으며 H2 DB와 Redis를 사용하였습니다.
https://goto-pangyo.tistory.com/286
https://drive.google.com/file/d/1DccNwJWmUPBpe3KwsqxPp_VpYIAQRRaR/view?usp=sharing
답변 2
0
2024. 05. 20. 10:02
혹시 저와 같은 문제를 겪고 계신 분들이 계실까 글을 남깁니다.
결론부터 말씀드리면 직렬화를 하고자하는 클래스(세션에 저장하고자 하는 클래스)에서 Serializable
인터페이스를구현하면 됩니다. 또한 제가 공식문서에서 찾아본 결과@EnableRedisHttpSession
어노테이션을 추가할 경우 sessionRepositoryFilter
가 추가됩니다. 그리고 해당 클래스는 Session
클래스를 한번 감싼것으로 기존의 http session 관련 메소드를 오버라이딩하여 기능을 커스터마이징이 가능합니다.(저 같은 경우에는 redis를 세션 저장소로 사용)
0
2024. 05. 17. 18:37
추가로 @EnableRedisHttpSession
에 대해 궁금한 점이 있습니다.
해당 어노테이션을 사용하였을 경우 스프링이 RedisIndexedSessionRepository
를 통해 Redis에 세션 저장을 자동으로 구현하는 듯한데
이는 UserNamePasswordAuthenticationFilter
에서만 그런것인가요?
아니면 다음과 같이 사용자 정의 필터를 구현하고 인메모리에 세션 영속화를 하였을때도 Redis에 저장이 되는건가요?