Spring Security는 필터(Filter)기반으로 동작하는데, 이를 이해하려면 DispatcherServelt과 Interceptor부터 이해해야한다.
✈ Controller까지 가는 길은
Filter -> Dispatcher Servlet -> Interceptor -> Controller이다.
🚒 Dispatcher Servlet은 HTTP요청을 받아서 요청에 맞는 컨트롤러로 연결해주는 역할을 한다.
Dispatcher Servlet가 클라이언트의 요청을 받음. -> Handler Mapping, HandlerAdapter를 통해 Handler에게 요청 전달. -> 요청에 맞는 컨트롤러에게 위임. -> 비즈니스 로직 -> 컨트롤러가 어댑터로 반환값 반환 -> 어댑터가 Dispatcher Servlet으로 반환 -> 클라이언트에게 반환.
😋 컨트롤러 직전과 직후에서 요청과 응답을 가로채서 원하는 동작을 추가하는 역할을 하는 친구
🌘 지정된 컨트롤러의 동작 이전에 가로채는 역할로 사용됨.
🌒 지정된 컨트롤러의 동작 이후에, Dispatcher Servlet이 화면을 처리하기 전에 동작함.
🌕 DispatcherSerlvet의 화면 처리(뷰)가 완료된 상태에서 처리함.
🔔 Filter는 Dispatcher Servlet이 요청을 받기전에 처리한다.
Spring Security는 이러한 Filter를 10개이상 기본적으로 제공한다.
이를 Security Filter Chain이라고 부른다.
기본 Filter는 다음 포스팅에 작성할 예정이다.
🧨 이때 중요한건 UserDetailsService가 인터페이스라는 것이다. 따라서 해당 인터페이스를 구현한 빈(Bean)을 생성해야한다. 즉, 어떤 데이터베이스에서 어떤 사용자의 정보를 읽어들일지 구현가능.
JSESSIONID란?
톰캣 컨테이너에서 세션을 유지하기 위해 발급하는 키
HTTP 프로토콜은 stateless하다. 따라서, 상태를 저장하기 위해서 톰캣은 JSESSIONID 쿠키를 클라이언트에게 발급해주고 이 값을 통해 세션을 유지할 수 있도록 한다.
https://gngsn.tistory.com/153
https://hello-judy-world.tistory.com/216
https://www.boostcourse.org/web326/lecture/58997?isDesc=false