본문 바로가기

Filter

(5)
서블릿으로 예외처리하기 - 필터, 인터셉터 그리고 DispatchType 예외 발생과 오류 페이지 요청 흐름 1. WAS(여기까지 전파) 컨트롤러(/errorpage/500) -> View 오류가 발생하면 오류 페이지를 출력하기 위해 WAS 내부에서 다시 한번 호출이 발생합니다. 이때 서버 내부에서 로그인 체크 기능을 담당하는 필터나 인터셉트가 한번 더 호출되는 것은 매우 비효율적입니다. 결국 클라이언트로부터 발생한 정상 요청인지, 아니면 오류 페이지를 출력하기 위한 내부 요청인지 구분할 수 있어야 합니다. 서블릿은 이런 문제를 해결하기 위해 DispatcherType이라는 추가 정보를 제공합니다. DispatcherType 필터는 이런 경우를 위해서 dispatcherTypes라는 옵션을 제공합니다. request.getDispatcherType() 오류 페이지에서 disp..
서블릿 필터 사용해 인증 체크하기 로그인되지 않은 사용자는 로그인이 필요한 여러 페이지에 접근을 하지 못해야 합니다. 여러 로직들은 인증이라는 공통 관심사를 가지고 있고 서블릿 필터를 사용해 해당 인증 기능을 공통적으로 적용하는 방법을 알아보겠습니다. 인증 체크 필터 만들기 @Slf4j public class LoginCheckFilter implements Filter { // 인증과 무관하게 항상 접근을 허용하는 요청 Url private static final String[] whitelist = {"/", "/members/add", "/login", "/logout", "/css/*"}; @Override public void doFilter(ServletRequest request, ServletResponse response..
서블릿 필터 사용해 요청 로그 남기기 공통 관심 사항 애플리케이션 여러 로직에서 공통으로 관심이 있는 있는 것을 공통 관심사(cross-cutting concern)라고 합니다. 만약 게시물을 관리하는 것을 로그인한 사용자에게만 허락한다면 게시물 등록, 수정, 삭제, 조회 등등 여러 로직에서 공통으로 인증에 대해서 관심을 가지고 있습니다. 웹과 관련된 공통 관심사를 처리할 때는 HTTP의 헤더나 URL의 정보들이 필요한데, 서블릿 필터나 스프링 인터셉터는 HttpServletRequest를 제공합니다. 서블릿 필터 소개 필터 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 필터를 적용하면 필터가 호출된 다음에 서블릿이 호출됩니다. 그래서 모든 고객의 요청 로그를 남기는 요구사항이 있다면 필터를 사용하면 됩니다. 참고로 ..
코틀린[Kotlin] Collections에서 자주 사용하는 함수 알아보기 (Filter, map, count, groupby ....) 지난번에 코틀린 collections에 대해 알아본 것에 이어서 컬렉션에서 자주 사용하는 함수들에 대해 알아보겠습니다. 함수들에 대해서 알면 알수록 개발이 편해지는 것 같습니다. 이런 상황에선 이걸 쓰고, 저런 상황에서는 저걸 쓰고 등등등 filter Filter 함수를 사용하면 컬렉션을 필터링할 수 있습니다. 필터는 컬렉션의 각 요소에 적용됩니다. 조건을 true로 만드는 값 들이 결과 컬렉션에 담겨 반환됩니다. val numbers = listOf(1, -2, 3, -4, 5, -6) // 1 val positives = numbers.filter { x -> x > 0 } // 2 val negatives = numbers.filter { it < 0 } // 3 숫자 컬렉션을 정의합니다. 양수를 ..
서블릿 필터 (Servlet Filter) 적용하기 이전 프로젝트를 참고해주세요. 서블릿 필터 (Servlet Filter) 적용하기 서블릿마다 공통되는 설정을(인코딩, 서블릿 접근 권한 체크) 서블릿마다 하는 것을 불편합니다. 모든 서블릿에서 많이 실행되는 설정들을 서블릿 이전에 필터에서 검사할 수 있습니다. 요청 순서는 다음과 같습니다. 클라이언트 → WAS → Filter → Servlet 응답 순서도 반대로 다음과 같습니다. Servlet → Filter → WAS → 클라이언트 필터를 적용하는 데 2가지 방법이 있습니다. 방법 1 @WebFilter("") 어노테이션 사용 @WebFilter("/*")를 통해 모든 요청에 대해 해당 필터를 통과하도록 설정합니다. chain.doFilter(request, response); 를 통해서 서블릿을 실..