SseEmitter Authorization Denied

Hyeok·2025년 5월 14일

문제상황

SseEmitter은 ResponseBodyEmitter를 상속받는데
ResponseBodyEmitter 공식문서를 보면 complete()시에
Complete request processing by performing a dispatch into the servlet container, where Spring MVC is invoked once more, and completes the request processing lifecycle. 라고 쓰여있음
-> 처음 클라이언트 요청이 들어와서 DispatcherServlet이 실행됐던 것처럼, 비동기 완료 시에도 다시 DispatcherServlet이 실행 된다는 말

DispatcherServlet이 필터 체인을 다시 실행하게 된다. 그때 인증정보가 없어서 발생하는 문제.

해결방안

연결이 끝날 때까지 인증 정보 남기기 (SecurityContextHolder의 전략을 MODE_INHERITABLETHREADLOCAL로 설정하여 비동기 스레드에서도 인증 정보를 유지하도록 설정하면 된다는 얘기가 있는데 제어해야할게 추가로 생긴다는 말도 있고 해서 좀 더 확인필요)vs 인증 통과 방식 처리 분리

고민해보기

profile
공부하면서 정리한 블로그입니다. 혹시 잘못된 내용이 있다면 댓글로 알려주시면 큰 도움이 됩니다. 감사합니다!

0개의 댓글