티스토리 뷰
728x90
반응형
필터(Filter)는 J2EE 표준 스펙 기능으로 디스패처 서블릿(Dispatcher Servlet)에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다.
라고 나와 있는데 걍 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너(서블릿 컨테이너)에 의해 관리가 되는 것이고(스프링 빈으로 등록은 된다), 디스패처 서블릿 전/후에 처리하는 것을 말합니다.
더 간단하게 얘기하면 클라이언트로부터 요청한 내용을 servlet으로 전송이 되는데 그전에 한번 걸러내는 작업을 하는 역할이 filter 라고 합니다.
Filter
필터(Filter) 인터페이스는 init, doFilter, destroy 로 구성되어있다.
public interface Filter {
public default void init(FilterConfig filterConfig) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;
public default void destroy() {}
}
Filter 상속한 TestFilter 메소드
public class TestFilter implements Filter{
@Override
public void init(FilterConfig fConfig) throws ServletException {
Filter.super.init(fConfig);
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
chain.doFilter(request, response);
}
@Override
public void destroy() {
Filter.super.destroy();
}
}
Filter 적용 방법
어노테이션 적용 설정
- @ServletComponentScan Application 클래스에 선언
- @Component를 선언하게 되면 해당 filter를 전체 적용이 됩니다.
- 특정 url에서 사용하고자 한다면 @WebFilter(urlPatterns = "/test/*") 등 특정 url을 이용하여 사용할 수 있습니다.
- @Order를 통해서 Filter 들간에 실행 순서를 설정할 수 있습니다.
@ServletComponentScan 예시)
@ServletComponentScan
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
Filter 설정 예시)
@Component
public class TestFilter implements Filter{
@WebFilter(urlPatterns = "/test/*")
public class TestFilter implements Filter{
@WebFilter(urlPatterns = "/test/*")
@Order(1)
public class TestFilter implements Filter{
어노테이션 x 적용 설정
FilterRegistrationBean 사용
해당 객체를 이용할 경우 @ServletComponentScan을 포함하여 필터 관련 어노테이션을 사용할 필요가 없다.
TestFilter 클래스
public class TestFilter implements Filter{
FiltersConfig( 예시 메소드)
@Configuration
public class FiltersConfig {
//Test2
@Bean
public FilterRegistrationBean<TestFilter2> test2Filter(){
FilterRegistrationBean<TestFilter2> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new AllowIpFilter()); //해당 filter
registrationBean.addUrlPatterns("/test/*"); //특정 url
registrationBean.setOrder(2); //순서
registrationBean.setName("allowIp-filter"); //필터 이름
return registrationBean;
}
//Test1
@Bean
public FilterRegistrationBean<TestFilter> testFilter(){
FilterRegistrationBean<TestFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new UserAgentFilter());
registrationBean.addUrlPatterns("/*");// 모든 url 적용
registrationBean.setOrder(1);//순서
registrationBean.setName("agent-filter");
return registrationBean;
}
}
order 를 선언하여 처리했을때 결과
아래 내용과 같이 order 순서를 지정한 순서대로 TestFilter -> TestFilter2로 체크되는 것을 확인할 수 있다.
@ServletCoponentScan을 이용하면 단점 세사한 filter처리 하고자 하거나 여러 filter를 처리하고자 할때 제안적일 수 있다.
그러므로 FilterRegistrationBean 사용 추천
728x90
반응형
'프로그램 언어 > Spring' 카테고리의 다른 글
Spring boot 3.x.x 에서의 Swagger적용 방법 (gradle 기준) (1) | 2023.11.28 |
---|---|
Rest API 요청 시 PKIX path build failed 에러 발생관련 이슈 처리 방법(경험담 포함..) (0) | 2023.05.29 |
Spring(Boot) FilterRegistrationBean를 사용 시 @Autowired 사용주의 (0) | 2023.05.12 |
ThymeleafParser를 이용한 동적 pdf 파일 생성 (0) | 2023.05.03 |
Spring Post/Get 한글 파라미터 값 깨짐 현상 (0) | 2023.05.02 |
250x250
반응형
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 네이버 클라우드
- centos7
- 스케줄러
- 도커
- 리눅스
- 격리수준
- 정의
- leatcode
- Lock
- insert
- Quartz
- Java
- 알고리즘
- 개념 이해하기
- dfs
- 권한
- Linux
- mybatis
- MySQL
- docker
- dockerfile
- Cache
- spring
- 캐시
- 캘린더
- hazelcast
- 컨테이너
- ncp
- 이미지
- LocalDate
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함