커스텀 필터에서 검증한 후에 시큐리티 기본 제공 필터로 넘긴다는거지? 그렇게 넘긴 후에 필터링 된 요청은 controller로 넘어가서 요청이 처리되고 처리된 요청이 응답으로 전송되는거고 ?
ChatGPT
네, 정확합니다. 커스텀 필터에서 JWT 토큰을 검증한 후, 요청을 Spring Security의 기본 제공 필터로 넘깁니다. 그 후에 요청은 컨트롤러로 전달되어 실제 비즈니스 로직이 처리되고, 처리된 결과가 응답으로 클라이언트에게 전송됩니다. 전체 흐름을 단계별로 설명하면 다음과 같습니다.
전체 요청 처리 흐름
- 클라이언트 요청:
- 클라이언트가 서버에 요청을 보냅니다. 이 요청에는 JWT 토큰이 포함되어 있을 수 있습니다.
- 필터 체인:
- JWTCheckFilter:
- 요청이 필터 체인에 들어오면, 먼저 JWTCheckFilter가 실행됩니다.
- JWTCheckFilter는 JWT 토큰을 검증합니다. 유효한 토큰이면 사용자 정보를 추출하여 SecurityContextHolder에 설정합니다.
- 그런 다음, filterChain.doFilter(request, response);를 호출하여 요청을 다음 필터로 전달합니다.
- 기본 제공 필터:
- 이후, Spring Security의 기본 제공 필터들이 순차적으로 실행됩니다. 예를 들어, UsernamePasswordAuthenticationFilter, CsrfFilter, SecurityContextPersistenceFilter 등이 있습니다.
- 각 필터는 자신이 처리해야 할 보안 작업을 수행합니다.
- JWTCheckFilter:
- 컨트롤러:
- 모든 필터를 통과한 요청은 컨트롤러로 전달됩니다.
- 컨트롤러는 비즈니스 로직을 수행하고 요청에 대한 응답을 생성합니다.
- 응답 처리:
- 생성된 응답은 다시 필터 체인을 거쳐 클라이언트로 전달됩니다.
- 응답 과정에서도 필터 체인이 적용될 수 있습니다. 예를 들어, 응답 헤더를 설정하는 필터가 있을 수 있습니다.
/*
JWT 토큰을 검증하는 Spring Security 필터를 구현합니다.
shouldNotFilter 메서드는 특정 조건에 따라 필터링을 건너뛰는 경로를 설정하고,
doFilterInternal 메서드는 요청의 JWT 토큰을 검증하여
유효한 경우 Spring Security의 인증 컨텍스트에 설정합니다.
예외가 발생하면 JSON 형식의 오류 메시지를 응답으로 반환합니다.
*/
요약
- 클라이언트가 요청을 보냄.
- 요청이 필터 체인에 들어감.
- JWTCheckFilter가 JWT 토큰을 검증하고 사용자 정보를 설정.
- 기본 제공 필터가 추가 보안 작업을 수행.
- 요청이 컨트롤러로 전달됨.
- 컨트롤러가 요청을 처리하고 응답을 생성.
- 응답이 다시 필터 체인을 거쳐 클라이언트로 전달됨.