쌓고 쌓다
서블릿 필터 본문
서블릿 필터의 필요성
상품 관리 페이지가 있다고 하자. 이 페이지는 로그인 회원만 이용이 가능하다.
상품 관리와 관련된 컨트롤러의 모든 로직에 로그인 여부를 체크할 수 있지만
모든 등록, 수정, 삭제, 조회 등등 공통으로 로그인 여부를 확인하는 로직이 필요하며, 추후에 로그인 로직과 관련된 수정 사항이 있을때
작성한 코드를 또 모두 수정해야한다.
위의 예처럼 애플리케이션 여러 로직에서 공통으로 필요한 부분을 "공통 관심사"라고 한다.
공통 관심사 문제는 서블릿 필터나 스프링 인터셉터를 사용하여 해결할 수 있다.
서블릿 필터 흐름
HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러
WAS(Web Application Server)로 tomcat이 있다.
필터의 흐름에 있는 서블릿은 Dispatcher Servlet을 생각하자.
필터 제한
HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 //로그인 사용자
HTTP 요청 -> WAS -> 필터(적절하지 않은 요청이라 판단, 서블릿 호출X) //비 로그인 사용자
필터를 통해 요청을 판단하여 서블릿을 호출할지 말지를 결정할 수 있다.
필터 체인
HTTP 요청 -> WAS -> 필터1 -> 필터2 -> 필터3 -> 서블릿 -> 컨트롤러
필터를 중간에 추가하여 체인처럼 연결하여 사용할 수 있으며
예를 들어. 로그를 남기는 필터를 적용하고 로그인 여부를 체크하는 필터를 적용할 수 있다.
필터 인터페이스
public interface Filter {
public default void init(FilterConfig filterConfig) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;
public default void destroy() {}
}
필터 인터페이스를 구현하고 등록하면. 서블릿 컨테이너가 필터를 싱글톤 객체로 관리한다.
- init : 필터 초기화 메서드. 서블릿 컨테이너가 호출될때 호출된다.
- doFilter : 요청이 올때마다 해당 메서드가 실행된다. 필터의 로직을 구현하자.
- destory() : 필터 종료 메서드. 서블릿 컨테이너가 종료될때 호출된다.
필터를 이용해 간단히 모든 요청을 남기는 필터를 적용해 볼 수 있다.
https://non-stop.tistory.com/588
'프로그래밍 > spring' 카테고리의 다른 글
[스프링 부트] BeanValidation 적용 - 29 (0) | 2023.09.11 |
---|---|
[스프링 부트] 모든 요청 로그 남기기(필터) - 28 (0) | 2023.09.10 |
[스프링 부트] 유효성 검사 @Validator - 27 (0) | 2023.09.09 |
카카오 로그인 API 및 쿠키 사용하기 (0) | 2023.09.03 |
Set-Cookie가 되었으나 쿠키가 저장이 안될때 (0) | 2023.09.03 |
Comments