본문 바로가기

개발/백엔드

spring boot - filter

실제 서비스를 운영하다 보면 요청에 따라 요청과 응답을 확인하고 싶을 때가 있습니다. 이때 저희는 Filter를 사용할 수 있습니다.

 

filter 패키지 하나 만들고 여기에 Log를 출력해 주는 LoggerFilter 클래스를 하나 만듭니다.

 

해당 클래스는 Component annotation을 붙여서 bean에 등록해 줍니다. @Component는 앱이 시작하는 동안 어플리케이션 컨텍스트에 추가해 주는 것인데 일단은 그냥 써줍시다.

 

빨간 줄에 커서를 대고 alt + enter, implement method, doFilter를 추가해 줍니다. 

servletRequest를 HttpServletRequest로 형변환해 주고 이를 ContentCachingRequestWrapper객체로 만들어 줍니다. response에 대해서도 같은 행동을 합니다.

doFilter 전은 요청에 대한 처리 전, doFilter 이후는 요청을 처리한 이후입니다.

 

요청한 정보의 헤더를 뽑아봅시다. req.getHeaderName으로 요청 정보를 볼 수 있습니다.

req.getHeader()로 특정 헤더에 대한 정보를 알아낼 수 있습니다.

req.getContentAsByteArray로는 body의 정보를 알 수 있습니다.

 

출력 결과를 보면 헤더에 대한 정보가 쭉 나오는 것을 알 수 있습니다.

 

body에는 요청한 정보를 알 수 있습니다.

 

response도 같은 방법으로 정보를 알아낼 수 있습니다.

 

응받을 한번 읽으면 정보가 사라지게 됩니다. 그럼 실제로 클라이언트는 빈 정보를 받게 됩니다. copyBodyToResponse로 사라진 정보를 복구해 줍니다.

 

헤더와 바디도 중요하지만 어떤 요청이 어떤 메소드로 왔는지도 중요합니다. getRequestURI와 getMethod를 통해 정보를 받아옵시다.

 

그럼 어디로 어떤 메소드로 어떤 정보가 오고갔는지 알 수 있습니다.

'개발 > 백엔드' 카테고리의 다른 글

spring boot - 메일 전송  (3) 2024.09.18
spring boot - db 조회  (0) 2024.09.10
spring boot - post 전송(with data)  (1) 2024.09.04
spring boot - 데이터베이스 연결  (0) 2024.09.03
spring boot - api 구조  (0) 2024.08.29