-
서블릿 필터(Filter)란? 필터 적용해보기SPRING/Filter & Interceptor 2021. 10. 13. 00:19반응형
필터란 HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 코드이다.
필터는 객체의 형태로 존재하며 클라이언트로부터 오는 요청과 최종 자원(JPS, 서블릿, 기타 자원) 사이에 위치하며 클라이언트의 요청 정보를 변경할 수 있다.
필터 흐름
HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러
필터를 적용하면 필터가 호출된 다음에 서블릿이 호출된다.
필터 제한
HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 //로그인 사용자
HTTP 요청 -> WAS -> 필터(적절하지 않은 요청이라 판단, 서블릿 호출 X) //비 로그인 사용자필터에서 적절하지 않은 요청이라고 판단하면 거기에서 끝을 낼 수 있다.
필터 체인
HTTP 요청 -> WAS -> 필터 1 -> 필터 2 -> 필터 3 -> 서블릿 -> 컨트롤러
필터는 이런 식으로 체이닝 형태로 추가할 수 있다.
예를 들어서 로그를 남기는 필터를 먼저 적용한 다음, 로그인 여부를 체크하는 필터를 추가할 수 있다.
필터(Filter) 인터페이스가 살펴보기
• init(): 필터 초기화 메서드, 서블릿 컨테이너가 생성될 때 호출된다.
• doFilter(): 고객의 요청이 올 때마다 해당 메서드가 호출된다. 필터의 로직을 구현하면 된다.
• destroy(): 필터 종료 메서드, 서블릿 컨테이너가 종료될 때 호출된다.필터 적용해보기(로그 남기기)
필터를 사용하려면 필터 인터페이스를 구현해야 합니다.(doFilter를 중점적으로 보겠습니다)
• doFilter(ServletRequest request, ServletResponse response, FilterChain chain): HTTP 요청이 오면 doFilter가 호출된다.
• UUID.randomUUID(). toString(): 요청을 구분 짓기 위함
WebConfig - 필터 설정
•addUrlPatterns("/*") : 필터를 적용할 URL 패턴을 지정한다. 한 번에 여러 패턴을 지정할 수 있다.
지금까지 로그를 남겨보는 필터를 적용해 보았습니다.
(필터를 등록할 때 urlPattern을 /* 로 등록했기 때문에 모든 요청에 해당 필터가 적용이 됩니다.)
참고로 @ServletComponentScan @WebFilter(filterName = "logFilter", urlPatterns = "/*")로
필터 등록이 가능하지만 필터 순서 조절이 안됩니다. 따라서 FilterRegistrationBean 을 사용하는 걸 권장합니다.
참고 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2 (김영한님 스프링2편)반응형'SPRING > Filter & Interceptor' 카테고리의 다른 글
스프링 인터셉터란(Interceptor)란? 인터셉터 적용해보기 (0) 2021.10.13