Java 기반 클라우드 융합 개발자 과정 - KH 정보교육원/8월

22.08.18 - [ WAS ] Filter

giggs 2022. 9. 1. 11:14

 

 

-- Index --

 

 

1. Filter 란 2. Filter 만들기 3. Filter 메서드 4. @WebFilter의 정석
특정 urlPattern에 대해서
무조건 거쳐가야하는
서블릿
implement
@WebFilter
@Override doFilter()
chain.doFilter()
init
doFilter
destroy
xml 파일에서 매핑작업
<filter>
<filter mapping >

 

 

 


 

 

 

1. Filter 란?

 

  • tomcat에 요청을 보낼 때 여러 서블릿(직원)들이 있는데
  • 그중에서도 입구에서 무조건 거쳐가야 하는 서블릿이 필터!
  • 정확히 말하면 입구 = 특정 urlPattern에 대해서 무조건 거쳐가야 하는 서블릿이 필터!

 

  • 어느 곳에서 요청을 보내는지 상관없이
  • Filter 의 url pattern이랑 매칭이 되면 해당 요청 잡아서 처리해준다.

 

 

 

 

 

 

 


 

 

 

 

 

2. Filter 만들기 

 

 

 

2-1 : implement Filter

 

 


 

2-2 : @WebFilter(urlPateerns)

  • 모든 요청에 대해 작동할것이므로 urlPatterns =  " /* " 

 

 


 

 

 

2-3 : Filter 인터페이스의 메서드 doFilter - @오버라이드

  • implement 했으니 미완성 메서드 만들어주기 - ( doFilter )
  • 필터에서 할 작업 지정 - ( 인코딩 작업 )

 

 

 

 

 

이렇게만 해주었더니 나의 요청이 필터에만 도착하고 끝나버렸다 . - 필터에 와서 막혀버렸다

필터 통과시켜도 괜찮다면 통과시켜주는 작업 필요

 

 


 

 

2-4 : 필터 통과시켜주기 -  chain.doFilter();

 

 

 

# 내 필터는 통과 다음으로 이동 통과통과하다보면 서블릿이나 jsp로 연결됨! #

 

 

 

 

 


 

 

 

 

3. Filter 의 메서드 확인 및 총 정리

 

 

 

3-1 : 필터의 메서드 확인 ( init , doFilter , destroy )

 

 


 

3-2 : 정리

 

 


 

3-3 : 필터는 어떨 때 걸어주면 좋을까요?

 

 

 

# 21번 라인 - (HttpServletRequest)로 캐스팅한 이유는?

  • request의 타입이 ServletRequest 인데, 너무 추상적인 애라서 getSession() 하지 못한다.
  • 보다 구체적인 HttpServletRequest로 캐스팅해 주어야만 getSession() 가능하다.

 

 

 


 

 

 

4. Filter의 정석 매핑 방법

  • @WebFilter 의 정석 -
  • 어노테이션 없었을때는 xml파일에다가 직접 매핑해주는 것이 정석이었다.( 서블릿처럼)

 

 

 


 

 

 

init 에서는 해당 객체가 태어날 때 있어야 하는 것들

( 채팅소켓에서 소켓 준비 같은)

 

destroy 에서는 해당 객체가 없어지면서 없어져야 하는 것들

(자원반납 / 만들어진 객체 파괴 같은 것들 한다.)

 

사실 destroy는 만질일이 거의 없다.

tomcat이 꺼질 때 실행된다 만약 정전이 됐다? - NO - 실행된다.

 

강사님은 observe 패턴으로 - 해당 객체 사라질 때 감지해서 실행되는 쓰레드로 관리하셨다