
전에 doFilter를 호출할 때 3개의 파라미터로 넘겼다가 (Filter를 포함한 파라미터)
에러가 났다.
받는 filter는 chain을 따로 넘겨줄 필요가 없다. 왤까..
근데 직접 dofilter를 확인 했을 땐 분명히 chain까지 받았딴 말이지..

그 이유는 ApplicationFilterChain가 중간 관리자로 다음 필터를 호출하기 때문!
뭔가 Chain of Responsibility로 구성된 securityChiain이라서 객체가 체인형태라서 각 객체가 부를 것 같았지만,
역시 중간에서 모든 걸 지휘하는 관리자가 있었다..
그렇지만 핵심은 각 체인이다!
현재 체인이 이 일을 처리할 지 말 지를 정해서 다음 필터를 호출하니까!
현재 체인이 이 일을 처리하지 않고 넘기기로 했다면, 그 중간관리자인 ApplicationFilterChain에
등록된 다음 필터를 불러준다! (실제로는 현재 체인에서 dofilter를 해서 다음필터를 불렀기에)

public final class ApplicationFilterChain implements FilterChain {
private ApplicationFilterConfig[] filters; // 등록된 필터 배열
private int pos = 0; // 현재 위치
@Override
public void doFilter(ServletRequest request, ServletResponse response)
throws IOException, ServletException {
// 1. 모든 필터를 다 호출했으면 서블릿으로 넘어감
if (pos < filters.length) {
// 2. 다음 필터 호출
Filter nextFilter = filters[pos++].getFilter();
nextFilter.doFilter(request, response, this); // ★ 여기 핵심
} else {
// 3. 마지막이면 DispatcherServlet 호출
servlet.service(request, response); // Spring MVC의 시작점
}
}
}'Spring' 카테고리의 다른 글
| 사용자 요청부터 스프링 시큐리티까지 feat)OAuth2 (0) | 2025.04.14 |
|---|---|
| JPA 1+N 문제 실습(1) (0) | 2025.04.12 |
| @transactional을 private메서드에 사용하고 싶다 (0) | 2024.01.21 |
| @entity 빨간줄 (0) | 2024.01.16 |