스프링 MVC 2 - 서블릿 필터 - 요청 로그
반응형
서블릿 필터 - 요청 로그
필터가 정말 수문장 역할을 잘 하는지 확인하기 위해 가장 단순한 필터인, 모든 요청을 로그로 남기는 필터를 개발하고 적용해보자.
LogFilter - 로그 필터
- public class LogFilter implements Filter {}
- 필터를 사용하려면 필터 인터페이스를 구현해야 한다.
- doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- HTTP 요청이 오면 doFilter가 호출된다.
- ServletRequest request는 HTTP 요청이 아닌 경우까지 고려해서 만든 인터페이스이다.
HTTP를 사용하면 HttpServletRequest httpRequest = (HttpServletRequest) request;와 같이 다운 캐스팅 하면 된다.
- String uuid = UUID.randomUUID().toString();
- HTTP 요청을 구분하기 위해 요청당 임의의 uuid를 생성해둔다.
- log.info("REQUEST [{}][{}]", uuid, requestURI);
- uuid와 requestURI를 출력한다.
- chian.doFilter(request, response);
- 이 부분이 가장 중요하다. 다음 필터가 있으면 필터를 호출하고, 필터가 없으면 서블릿을 호출한다.
만약 이 로직을 호출하지 않으면 다음 단계로 진행되지 않는다.
- 이 부분이 가장 중요하다. 다음 필터가 있으면 필터를 호출하고, 필터가 없으면 서블릿을 호출한다.
WebConfig - 필터 설정
필터를 등록하는 방법은 여러가지가 있지만, 스프링 부트를 사용한다면 FilterRegistrationBean을 사용해서 등록하면 된다.
- setFilter(new LogFIlter()) : 등록할 필터를 지정한다.
- setOrder(1) : 필터는 체인으로 동작한다. 따라서 순서가 필요하다. 낮을 수록 먼저 동작한다.
- addUrlPatterns("/*") : 필터를 적용할 URL 패턴을 지정한다. 한번에 여러 패턴을 지정할 수 있다.
참고
URL 패턴에 대한 룰은 필터도 서블릿과 동일하다. 자세한 내용은 서블릿 URL 패턴으로 검색해보자.
참고
@ServletComponentScan @WebFilter(filterName = "logFilter", urlPartters = "/*")로 필터 등록이 가능하지만 필터 순서 조절이 안된다. 따라서 FilterRegistrationBean을 사용하자.
실행 로그
필터를 등록할 때 urlPattern을 /*로 등록했기 때문에 모든 요청에 해당 필터가 적용된다.
참고
실무에서 HTTP 요청시 같은 요청의 로그에 모두 같은 식별자를 자동으로 남기는 방법은 logback mdc로 검색해보자.
반응형
'Spring' 카테고리의 다른 글
스프링 MVC 2 - 스프링 인터셉터 - 소개 (1) | 2022.09.23 |
---|---|
스프링 MVC 2 - 서블릿 필터 - 인증 체크 (0) | 2022.09.22 |
스프링 MVC 2 - 서블릿 필터 - 소개 (1) | 2022.09.21 |
스프링 MVC 2 - 정리(로그인 처리1 - 쿠키, 세션) (0) | 2022.09.20 |
스프링 MVC 2 - 세션 정보와 타임아웃 설정 (0) | 2022.09.20 |
댓글
이 글 공유하기
다른 글
-
스프링 MVC 2 - 스프링 인터셉터 - 소개
스프링 MVC 2 - 스프링 인터셉터 - 소개
2022.09.23 -
스프링 MVC 2 - 서블릿 필터 - 인증 체크
스프링 MVC 2 - 서블릿 필터 - 인증 체크
2022.09.22 -
스프링 MVC 2 - 서블릿 필터 - 소개
스프링 MVC 2 - 서블릿 필터 - 소개
2022.09.21 -
스프링 MVC 2 - 정리(로그인 처리1 - 쿠키, 세션)
스프링 MVC 2 - 정리(로그인 처리1 - 쿠키, 세션)
2022.09.20