본문 바로가기
Java Web/Spring Boot

[Spring Boot] 필터 (Filter)

by 스응 2023. 4. 12.
728x90
728x90

필터 (Filter)

  - 요청/응답을 처리하기 전에 특정 작업을 수행할 수 있는 컴포넌트

  - 웹 애플리케이션 영역에서 관리

  - Spring Container의 앞에 위치하며, Web Container (WAS) 내에서 실행됨

      → 필터는 요청이 필터/서블릿에 도달하기 전에 요청을 가로챌 수 있음

 

#  실행 시점

  - 클라이언트 요청이 실제 서블릿/컨트롤러에 도달하기 전에 실행됨

  - 서블릿/컨트롤러의 응답이 클라이언트로 돌아가기 전에 실행됨

 

#  목적

  i. 인증 및 인가

      : 사용자의 자격 증명을 확인하고 요청된 리소스에 대한 액세스 권한을 검사함

  ii. 로깅

      : 요청 및 응답에 대한 로깅 수행

  iii. 요청 및 응답 수정

      : 헤더, 쿠키, 파라미터 등을 추가/수정/삭제

  iv. CORS (Cross-Origin Resource Sharing) 설정

      : 여러 도메인 간의 리소스 공유를 허용 or 제한함

  v. 압축

      : 응답 데이터를 압축하여 전송 효율 개선

 

 


필터 구현 방법

1. javax.servlet 패키지의 filter 인터페이스를 구현한 클래스 생성

2. 해당 클래스를 bean 객체로 지정

2. 구현 클래스 내에 필요한 로직 작성

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@Slf4j // 로깅을 사용할 수 있는 라이브러리
@Component // 1개의 객체만 bean으로 지정
public class GlobalFilter implements Filter { 
 
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
    
        // 로깅 처리 : 요청 URI을 콘솔 창에서 먼저 확인
        HttpServletRequest httpRequest = (HttpServletRequest) request; // ServletRequest에서 HttpServletRequest로 다운 캐스팅
        HttpServletResponse httpResponse = (HttpServletResponse) response; // request에 맞게 response도 다운 캐스팅
        
        log.info("요청 URI : {}", httpRequest.getRequestURI()); // {}에 매핑되어 들어감
        
        chain.doFilter(httpRequest, httpResponse); // 이거 없으면 컨트롤러로 안 넘어감
        
        log.info("응답 상태 : {}", httpResponse.getStatus()); 
        
    }
 
}
cs
320x100
반응형

댓글