Filter

오늘도 코딩중!·2023년 3월 27일
0

Servlet

목록 보기
2/4

Filter

Filter의 정의

필터 (Filter)

  • 클라이언트 요청 시 생성되는
  • HttpServletRequest, HttpServletResponse가
  • 요청을 처리하는 Servlet에 도달하기 전에
  • 특정코드를 수행하는 클래스

[요청흐름]

  • 클라이언트 -> 요청 -> HttpServletRequest/Response 생성 -> 필터 -> 요청처리Servlet

  • 여러 필터를 만들 수 있음. 연쇄적으로 연결하여 수행할 수 있음(FilterChain)

  • @WebFilter("url 패턴")

  • 해당 클래스를 필터 클래스로 등록하는 annotation

  • url 패턴에 일치하는 요청이 있을 경우 해당 요청을 필터링함.

  • filterName 속성 : 필터의 이름을 지정, 필터 순서 지정 시 사용

  • urlPatterns 속성 : 요청 주소 패턴

이것을 통해서 우리는 구현할 때, 일일이 구현해야하는 기능들을 한꺼번에 몰아서 한번에 실행할 것이다. 자, 그럼 예제를 통해 필터의 기능을 살펴보도록 합시다.

예제

로그인에서 사용하는 필터.

우리는 이 두가지를 오늘 다룰 예정이다.

위에서 다룬 filterName과 urlPatterns.
필터 순서와, 필터를 쓸 url을 다룬다.

필터를 만들기 위해서는 implements로 필터를 받아와 구현을 해야한다.

patterns에 /*을 써서 모든 서블릿에 적용하도록 patterns을 적용하였다.

init()메서드

-> 서블릿 컨테이너에서 필터 객체를 생성할때 최초에 한 번 실행하는 메서드.

++ 찾아보니 이런 기능이 있다고 한다

init() 메소드에서 주로 수행하는 작업은 다음과 같습니다.

필터의 구성: 필터 구성 정보를 읽어들여 필터의 초기 상태를 설정합니다. 예를 들어, 필터의 초기화 매개변수를 읽어들일 수 있습니다.

리소스 로딩: 필터에서 사용하는 리소스를 미리 로딩하여 필터가 실행될 때 빠른 처리를 가능하게 합니다.

데이터베이스 연결: 필터에서 데이터베이스 연결을 초기화합니다.

로그 설정: 필터가 기록하는 로그에 대한 설정을 초기화합니다.

기타 초기화 작업: 필터에서 수행할 기타 초기화 작업을 수행합니다.

우리는 doFilter를 통해 이 필터가 실행하는 역할을 구현할 것이다.

doFilter에서 사용하는 매개변수 ServletRequest와 ServletResponse는 각각, HttpServletRequest, HttpServletResponse의 부모타입으로, 필요할 시, 다운캐스팅을 통해서 사용할 수 있다.

우리는 doPost를 위해, 인코딩을 이 필터에서 설정. setCharacterEncoding을 사용.

그리고 이 필터에 최상위 경로를 얻어올 수 있는 값을 세팅하는 과정도 추가.


EncryptFilter

  • 암호화를 할 때 사용하는 필터

주의 사항
-> wrapper클래스가 필요하다!


암호화를 사용할 url인 로그인, 회원가입, 비밀번호 변경, 탈퇴에 사용하는 patterns.

우리는 암호화를 위해서 doFilter를 작성해본다.


EncryptFilter도 ServletRequest와 ServletResponse를 매개변수로 가져오고, FilterChain으로 수행해야할 필터가 있으면 그곳으로 갈 수 있게 매개변수로 받아온다.

바꿀 암호를 가져오기 위해 ServletRequest를 다운캐스팅하여 HttpServlet으로 변경시켜준다.

이때, 필터 내부에서는 파라미터를 세팅해주는 것이 불가능함으로 Wrapper클래스를 이용한다.

wrapper클래스를 생성하고 req를 매개변수로 보내주면 매개변수 생성자로 기존에 있었던 내용을 실행하고

오버라이딩을 통해 getParameter로 가져올 내용의 타입을 고려하여 value를 전환시킨다.

value를 전환시킬 함수.

이를 통해 서블릿에서 암호화를 완료한다.


추신. 로그아웃 하는 방법(invalidate 세션의 삭제.)

profile
늦은만큼 코막고 달려!

0개의 댓글