인프런 커뮤니티 질문&답변

한병찬님의 프로필 이미지

작성한 질문수

스프링 시큐리티 완전 정복 [6.x 개정판]

DelegatingFilterProxy / FilterChainProxy

FilterChain 내 일반 서블릿 필터와 DelegatingFilterproxy의 차이점

24.05.21 09:55 작성

·

216

0

안녕하세요, 좋은 강의에 항상 감사드리고 있습니다.

 

다름이 아니고 수업자료 내 FilterChain 그림에 보면, 그냥 Filter와 DelegatingFilterProxy 가 연결되어 있으며, DelegatingFilterProxy 가 FilterChainProxy에 보안처리를 위임하고 있습니다.

한편, 코드 내에서 디버깅을 하면서 확인할 수 있는 필터는 모두 FilterChainProxy 안에 있는 필터들(강의영상에서는 16개)만 확인이 되고, DelegatingFilterProxy가 아닌 보통 서블릿 필터는 확인이 되지 않는 것 같습니다.

DelegatingFilterProxy가 Spring에서 Filter을 사용할 수 있도록 하는 역할을 한다고 말씀하신 것으로 보아 다른 Filter 들은 Spring 코드 내에서 어떤 역할(Authentication인지 등..)을 하는 지 확인할 수 없는 것인지요?

또한 코드 내에서 확인이 안된다면 Tomcat 등 WAS 자체의 스펙 내에서 확인이 되는 건가요?

 

감사합니다.

답변 2

0

정수원님의 프로필 이미지
정수원
지식공유자

2024. 05. 26. 22:01

스프링 시큐리티 필터체인외에도 어플리케이션 필터체인도 확인이 가능합니다.

image

위 이미지 보시면 ApplicationFilterChain 을 확인할 수 있습니다.

ApplicationFilterConfig 안에 보면 필터들을 가지고 있습니다.

스프링 시큐리티 필터체인이 모두 실행되면 ApplicationFilterChain 으로 넘어갑니다

0

인프런 AI 인턴님의 프로필 이미지

2024. 05. 21. 10:01

안녕하세요, 인프런 AI 인턴입니다. 한병찬님 질문에 대해 도움을 드리고자 합니다.

먼저, DelegatingFilterProxy와 일반 서블릿 필터(Filter)의 차이점 및 역할에 대해 설명드리겠습니다. DelegatingFilterProxy는 Spring의 ApplicationContext에서 정의된 Spring Bean을 대상으로 필터 로직을 수행하게 위임하는 역할을 합니다. 즉, Spring에서 관리하는 필터(예: Spring Security 필터)들을 Servlet Filter Chain에 통합하기 위한 가교 역할을 담당합니다. 이를 통해, Spring Security 등을 이용한 보안 처리를 서블릿 필터 체인에 적용할 수 있습니다.

일반적인 서블릿 필터는 Servlet API에 의해 정의되며, HTTP 요청 및 응답을 조작하거나, 요청을 특정 서블릿 또는 JSP 등으로 전달하기 전에 필요한 사전 처리를 담당합니다. 이런 필터들은 보통 web.xml 파일이나 Java Config를 통해 등록됩니다.

DelegatingFilterProxy를 이용하여 Spring에서 관리하는 Filter들을 적용하면, 실제 Spring 내부에서 정의한 FilterChainProxy 안에 모든 필터들이 구성됩니다. 따라서 디버깅 시 DelegatingFilterProxy를 거쳐 FilterChainProxy 안에서 정의된 필터들만 확인되는 것입니다.

질문자님이 언급하신, 코드 내에서 확인되지 않는 일반 서블릿 필터들의 경우, 이는 Spring의 ApplicationContext에 정의되지 않고 서블릿 컨테이너(Tomcat 등)에서 별도로 처리되는 필터들을 의미할 수 있습니다. 이러한 필터들은 대개 애플리케이션의 web.xml 파일이나 Spring Boot의 경우 자동 설정된 필터들을 통해 관리됩니다.

이와 관련하여 유사한 질문과 답변이 있었습니다. 다음 링크를 확인해 보시면 도움이 될 것 같습니다.

해당 링크들은 DelegatingFilterProxy와 관련하여 상세한 설명을 포함하고 있으며, DelegatingFilterProxy와 일반 서블릿 필터의 차이, 그리고 Spring의 ApplicationContext와의 관계 등에 대한 이해를 돕고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.