□ Filter 란?
- HTTP 요청과 응답을 가로채고 수정할 수 있는 메커니즘을 제공하는 구성 요소
- URL 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있다.
- javax.servlet.Filter 인터페이스를 구현한 클래스이다.
▷ 사용 목적
- 요청과 응답을 동적으로 가로채서 해당 정보를 변환하거나 사용한다.
- 주로 요청/응답 변형, 인증 및 권한 부여, 로깅 및 감시를 목적으로 사용한다.
□ Filter 동작
1. Filter 동작 순서
- 요청: 여러 필터가 체인 형태로 연결되어 각각의 필터가 순서대로 요청을 처리
- 처리: 체인의 끝에 도달하면 최종적으로 서블릿에게 제어를 전달
- 응답: 역순으로 필터를 거쳐 클라이언트에게 전달
2. 전체 동작 순서
a. 클라이언트 요청이 웹 애플리케이션에 도달
b. 필터 체인에 정의된 필터들이 순차적으로 요청을 (전)처리
c. 최종적으로 서블릿이나 JSP가 요청을 처리
d. 응답이 필터 체인을 통해 클라이언트로 전달
e. 각 필터가 응답을 후처리
□ Filter 생성 및 설정 방법
1. Filter 생성하기
- `javax.servlet.Filter` : Java Servlet API의 일부로, 웹 애플리케이션에서 들어오는 요청과 해당 응답을 가로채고
조작하는 데 사용되는 인터페이스
import javax.servlet.Filter; ... public class JinnyFilter implements Filter { // init , doFilter , destroy 메소드 구현 } |
- init , doFilter , destroy 메소드
@Override public void init(FilterConfig filterConfig) throws ServletException { // 필터 초기화 작업 } |
@Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 요청 처리 전 작업 System.out.println("Request received"); // ex) request 가공
// 다음 필터 또는 서블릿으로 요청 전달 chain.doFilter(request, response);
// 응답 처리 후 작업 System.out.println("Response sent"); // ex) return or response 처리 } |
@Override public void destroy() { // 필터 종료 작업 (자원 반환) } |
2. Filter 설정
- FilterConfig : 서블릿 필터의 설정과 초기화 정보를 제공하는 인터페이스
a. @Configuration + FilterRegistrationBean : 필터의 실행 순서와 URL 패턴을 쉽게 지정할 수 있다.
@Configuration public class FilterConfig { @Bean public FilterRegistrationBean<Filter> logFilter() { FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>(); bean.setFilter(new JinnyFilter()); bean.setOrder(1); bean.addUrlPatterns("/*"); return bean; } } // 어노테이션 없음 public class JinnyFilter implements Filter { ... } |
b. @Component + [@Order(n) … ] : 필터 클래스를 Spring의 관리 하에 두고, 필요하다면 @Order 어노테이션을 사용하여
필터의 순서를 지정할 수 있다.
- URL 패턴을 세부적으로 제어하기는 어렵지만, 간단한 필터 등록에 유용하다.
@Component @Order(1) public class JinnyFilter implements Filter { ... } |
c. @WebFilter + @ServletComponentScan
- URL 패턴을 쉽게 설정할 수 있으며, Spring Boot 애플리케이션 시작 시 자동으로 필터를 스캔하고 등록한다.
@WebFilter(urlPatterns= "/me/*") public class JinnyFilter implements Filter { ... } @ServletComponentScan @SpringBootApplication public class FilterApplication { public static void main(String[] args) { SpringApplication.run(SpringCoreMvc26Application.class, args); } } |
□ Spring Filter
- Spring은 Java Servlet API의 필터 기능을 확장하여 다양한 추가 필터들을 제공
□ Spring Security Filter
- Spring Security는 여러 개의 보안 필터로 구성된 필터 체인을 제공
- 정의: 특정 보안 작업을 수행하는 `javax.servlet.Filter` 인터페이스를 구현했으며,
Spring Security에서 제공하는 보안 필터
- 역할: HTTP 요청과 응답을 가로채고, 인증, 인가, 로깅, CSRF 보호 등의 보안 작업을 수행한다.
⭐발표자 : 이현진님
□ Filter 란?
- HTTP 요청과 응답을 가로채고 수정할 수 있는 메커니즘을 제공하는 구성 요소
- URL 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있다.
- javax.servlet.Filter 인터페이스를 구현한 클래스이다.
▷ 사용 목적
- 요청과 응답을 동적으로 가로채서 해당 정보를 변환하거나 사용한다.
- 주로 요청/응답 변형, 인증 및 권한 부여, 로깅 및 감시를 목적으로 사용한다.
□ Filter 동작
1. Filter 동작 순서
- 요청: 여러 필터가 체인 형태로 연결되어 각각의 필터가 순서대로 요청을 처리
- 처리: 체인의 끝에 도달하면 최종적으로 서블릿에게 제어를 전달
- 응답: 역순으로 필터를 거쳐 클라이언트에게 전달
2. 전체 동작 순서
a. 클라이언트 요청이 웹 애플리케이션에 도달
b. 필터 체인에 정의된 필터들이 순차적으로 요청을 (전)처리
c. 최종적으로 서블릿이나 JSP가 요청을 처리
d. 응답이 필터 체인을 통해 클라이언트로 전달
e. 각 필터가 응답을 후처리
□ Filter 생성 및 설정 방법
1. Filter 생성하기
- `javax.servlet.Filter` : Java Servlet API의 일부로, 웹 애플리케이션에서 들어오는 요청과 해당 응답을 가로채고
조작하는 데 사용되는 인터페이스
import javax.servlet.Filter;
...
public class JinnyFilter implements Filter {
// init , doFilter , destroy 메소드 구현
}
- init , doFilter , destroy 메소드
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 필터 초기화 작업
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 요청 처리 전 작업
System.out.println("Request received");
// ex) request 가공
// 다음 필터 또는 서블릿으로 요청 전달
chain.doFilter(request, response);
// 응답 처리 후 작업
System.out.println("Response sent");
// ex) return or response 처리
}
@Override
public void destroy() {
// 필터 종료 작업 (자원 반환)
}
2. Filter 설정
- FilterConfig : 서블릿 필터의 설정과 초기화 정보를 제공하는 인터페이스
a. @Configuration + FilterRegistrationBean : 필터의 실행 순서와 URL 패턴을 쉽게 지정할 수 있다.
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean<Filter> logFilter() {
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
bean.setFilter(new JinnyFilter());
bean.setOrder(1);
bean.addUrlPatterns("/*");
return bean;
}
}
// 어노테이션 없음
public class JinnyFilter implements Filter {
...
}
b. @Component + [@Order(n) … ] : 필터 클래스를 Spring의 관리 하에 두고, 필요하다면 @Order 어노테이션을 사용하여
필터의 순서를 지정할 수 있다.
- URL 패턴을 세부적으로 제어하기는 어렵지만, 간단한 필터 등록에 유용하다.
@Component
@Order(1)
public class JinnyFilter implements Filter {
...
}
c. @WebFilter + @ServletComponentScan
- URL 패턴을 쉽게 설정할 수 있으며, Spring Boot 애플리케이션 시작 시 자동으로 필터를 스캔하고 등록한다.
@WebFilter(urlPatterns= "/me/*")
public class JinnyFilter implements Filter {
...
}
@ServletComponentScan
@SpringBootApplication
public class FilterApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCoreMvc26Application.class, args);
}
}
□ Spring Filter
- Spring은 Java Servlet API의 필터 기능을 확장하여 다양한 추가 필터들을 제공
□ Spring Security Filter
- Spring Security는 여러 개의 보안 필터로 구성된 필터 체인을 제공
- 정의: 특정 보안 작업을 수행하는 `javax.servlet.Filter` 인터페이스를 구현했으며,
Spring Security에서 제공하는 보안 필터
- 역할: HTTP 요청과 응답을 가로채고, 인증, 인가, 로깅, CSRF 보호 등의 보안 작업을 수행한다.
⭐발표자 : 이현진님