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
반응형
'Java > Spring Boot' 카테고리의 다른 글
[Spring Boot] 세션 (Session) (0) | 2023.04.13 |
---|---|
[Spring Boot] 인터셉터 (Interceptor) ★ (0) | 2023.04.13 |
[Spring Boot] JSP 템플릿 엔진 연결하기 (0) | 2023.04.12 |
[Spring Boot] 예외 처리 (exception) (0) | 2023.04.12 |
[Spring Boot] Validation 관련 : BindingResult 클래스 (0) | 2023.04.11 |