서블릿 필터 (1)

JIWOO YUN·2024년 3월 5일
0

SpringMVC2

목록 보기
20/26

서블릿 필터 사용전

  • 요구사항이 로그인 한 사용자만 상품 관리 페이지에 들어갈 수있어야한다.
    • 현재 상황은 로그인을 하지 않은 사용자도 직접 URL을 호출하면 관리 화면에 들어갈 수있는 문제가 있다.
  • 상품 관리 컨트롤러에 로그인 여부를 체크하는 로직하나하나 작성해서도 관리가 가능하지만 등록,수정,삭제, 조회 등등 상품 관리의 모든 컨트롤러 로직에 공통으로 로그인 여부를 확인해야함.
    • 더 큰 문제는 향후 로그인과 관련된 로직이 변경될 경우 -> 작성한 로직을 다 수정해야할 수 있는 큰 문제가 발생할수있다.

공통관심사

이 처럼 애플리케이션 여러 로직에서 공통으로 관심이 있는 것을 공통 관심사 라고 함.

  • 현재 등록, 수정, 삭제, 조회등등 여러 로직에서 공통으로 인증에 대해서 관심을 가지고있다.

AOP 로도 해결이 가능하지만 , 웹과 관련된 공통 관심사의 경우 서블릿 필터 또는 스프링 인터셉터를 사용하는 것이 좋다.

서블릿 필터

  • 필터는 서블릿이 지원하는 수문장.

    • 필터의 흐름

      • Http 요청 -> WAS -> 필터 -> 서블릿 -> 컨테이너
      • 필터가 호출된다음 서블릿이 호출

      • /* 라고 할시에 모든 요청에 필터 적용

      • 특정 URL 패턴에 적용이 가능하다.

  • 필터 제한
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() -> 고객의 요청이 올 때 마다 해당 메서드가 호출됨 -> 필터의 로직을 구현하면됨.
  • destroy() -> 필터 종료 메서드 , 섭르릿 컨테이너가 종료될때 호출됨
profile
열심히하자

0개의 댓글