스프링 자체는 Apache Tomcat으로 감싸져 있고 내부에 스프링이 존재함
8080포트를 뚫고 들어오면 디스패쳐서블렛이 존재하는데 시큐리티 필터가 존재 함
- 시큐리티 필터를 뚫고 들어가야 디스패쳐 서블렛이 존재함
- 디스패쳐 서블렛은 doget, dopost, doput, dodelete 메소드 들을 가지고 있고 서블릿의 생명 주기를 갖고 있는데 이제 주소를 파싱해서 컨트롤러를 찾아주는 역할을 함
여기서 알아두어야 할 부분이 디스패쳐 서블렛 이후에서 발생하는 오류는 RestControllerAdvice
를 사용하여 에러가 throw 되는 시점에 낚아 채서 예외처리 후 응답값을 반환하는데
그 이전에 시큐리티 필터에서 반환하는 건 Security Config에서 따로 정의를 내려야함
시큐리티 필터는 여러 종류가 있는데 그중 우리가 사용하는건
유저 패스워드 필터랑 베이지 어센션토큰 필터
- 패스워드 필터는
/login
요청이 왔을 때 동작(인증)
- 유저의 아이디와 패스워드를 받아옴
- 파싱하여 DTO 파일로 변환함
- 유저의 정보를 담은 인증 토큰 생성(JWT 토큰X)
userDetailsService
호출 → DB 확인
- 만약 여기서 실패하여 에러 반환하면 unSucessful 메서드 실행됨
- 있으면 LoginUser 객체 생성하여 리턴 후 시큐리티 전용 세션에 담음
- 스프링 시큐리티 컨텍스트 홀더에
Authentication
객체 형태로 담은 이후 토큰 생성 후 response 에 반환
- 응답 후, 세션은 관리 안함
- 베이직 어센션 토큰은 모든 요청에 대해서 동작(인가)
- 요청 시 토큰을 검증부터 하고 Authentication 객체를 강제로 생성
- 이후 해당 객체를 시큐리티 세션에 담기
Spring Security의 요청 구조

일반적으로 알고 있는 SpringMvc에서 요청이 들어오면 Front Controller인 DispatcherServlet에 들어오는데 그 이전에 Filter를 거쳐서 요청이 오게 된다.
<aside>
💡 DispatcherServlet?
- HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러(Front Controller)
- doGet, doPost, doDelete, doPut Method를 가지고 있고 Servlet의 생명 주기를 갖고 있으며 들어온 요청 주소를 파싱하여 해당 Controller로 연결하는 역할 수행
</aside>