이 강의에서는
고유의 커스텀 필터를 실행하여 할 때마다
생각이 들 수 있는
주목 받는 첫 번째 질문에 대해 이야기 해보겠습니다
이 질문은 바로
"내가 어떻게 나만의 커스텀 필터를 정의할 수 있을까요?"
라는 여러분의 궁금증일 것입니다
내가 나만의 커스텀 필터를 작성하려면
단순히 jakarta.servlet 패키지 내에 있는
필터(Filter) 인터페이스를
확장하면 됩니다
이 필터를 구현하는 클래스 내에서
이 필터 인터페이스를 구현한 후
doFilter라는
메소드 내에서
실행하고 싶은
모든 로직을 작성해야 합니다
이 doFilter 메소드는
세 가지 입력 매개변수를 제공하거나 액세스 합니다
첫 번째 매개변수는 ServletRequest 입니다
이건 엔드 유저로부터 오는
HTTP input 요청을 나타냅니다
두 번째 매개변수는 ServletResponse로
엔드 유저나 클라이언트에게
다시 보낼
HTTP 응답을 나타냅니다
세 번째 매개변수는 FilterChain 입니다
우리가 이전에 설명한 것처럼
FilterChain은 정의된 순서대로
실행되는 필터들의 집합을 나타냅니다
FilterChain 매개변수를 가지고 우리가 하려는 것은
우리의 실행이 끝나면
FilterChain 내의 다음 가능한 필터를
불러와야 합니다
따라서 doFilter 메소드에 대한
이러한 세 번째 매개변수를 가져야 하는 것입니다
만약 여러분이 나만의 커스텀 필터를 생성했다고 가정하면
다음 질문은 무엇일까요?
어떻게 내 커스텀 필터를
Spring Security FilterChain에 주입할 수 있을까요?
Spring Security 프레임워크 내에서
이를 위한 중요한 세 가지 메소드들이 있습니다
addFilterBefore
addFilterAfter 그리고 addFilterAt입니다
이러한 필터를 사용하여
나만의 커스텀 필터를
Spring Security 내부 FilterChain에 주입할 수 있습니다
이 메소드들을 보면
두 가지의 매개변수를 받습니다
하나는 나만의 커스텀 필터 클래스의 객체이고
두 번째 매개변수는
Spring Boot 내부 빌트인 필터의 이름을 제공합니다
이 내부 빌트인 필터 이름을 바탕으로
그것보다 앞에 놓거나 뒤에 놓거나
혹은 동일한 위치에 놓을 수 있습니다
이러한 메소드들에 대해 자세히 알아볼테지만
지금은 상위 개념을 더 살펴보겠습니다
그리고 이러한 메소드들은
우리가 동일한 메소드로부터 모든 end matches
cost configurations, ESRF configurations을 가지고 있는
메소드에서 호출해야 합니다
이제 이 필터 인터페이스를
우리의 Java 라이브러리에서
확인해보겠습니다
이것은 제가 언급하고 있는
필터 인터페이스입니다
이는 우리의 Java 라이브러리 내에 위치하고 있고
jakarta.servlet이라는 패키지에 있습니다
그러나 이 패키지는
Java의 최근 버전에서만
볼 수 있습니다
이전 버전에서는
javax.servlet 이라는 패키지로 확인됩니다
이름이 변경된 이유는
Oracle이 Java Enterprise Edition을
jakarta라는 오픈 소스 커뮤니티에
넘겨주었기 때문입니다
그래서 그들은 모든 패키지 이름을 변경했습니다
이 필터 내부를 살펴보면 세 가지 메소드가 있습니다
하나는 init이며 이는 기본적인 상태이고
비어 있습니다
마지막은 destroy 메소드입니다
이것도 기본적으로 비어있는 메소드입니다
우리는 init 및 destroy 내부에
어떤 비즈니스 로직을 작성할 수 있습니다
따라서 기본적으로 우리가 이 필터를 실행할 때
init에 작성한 로직이
실행됩니다
비슷하게 destroy 내에 로직을 썼다면
이 특정 필터를 서블릿 콘테이너에서
destroy 될 때
똑같은 것이 실행됩니다
기본적으로 이것은 비어 있습니다
두 메소드를 오버라이드하고 구현하지 않아도 됩니다
주된 메소드 doFilter로 이동합니다
이것은 여러분이 나만의 커스텀 필터를
정의하려면 오버라이드하고
비즈니스 로직을 구현해야 하는 메소드입니다
이제 여러분이 나만의 커스텀 필터를
만드는 프로세스에 대해 이해한 것으로 간주합니다
다음 강의에서는
나만의 커스텀 필터를 만들고
이를 Spring Security 내부 FilterChain에
주입해보겠습니다
감사합니다 다음 강의에서 뵙겠습니다
수고하셨습니다