본문 바로가기

Spring/Filter

1) Spring Boot Filter 사용하기

반응형

spring boot에서 필터를 사용하기 위해서는 2가지 방법을 사용한다.

 

1) Configuration 을 통해 Bean으로 필터를 등록

package com.devracoon.test;

import com.devracoon.test.filter.OneFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class SpringConfig {

    @Bean
    public FilterRegistrationBean<OneFilter> getOneFilter(){
        FilterRegistrationBean registrationBean = new FilterRegistrationBean(new OneFilter());
        registrationBean.setOrder(0);
        return registrationBean;

    }
}
@Slf4j
public class OneFilter extends GenericFilterBean {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        log.info("One Filter ");
        chain.doFilter(request, response);
    }
}

 

등록된 Filter가 잘 작동하는지 테스트 해보자. 

샘플로 만든 Rest API를 호출해 보자.

package com.devracoon.test.controller;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@RestController
@RequestMapping("/test/api")
public class TestRestAPI {

    @RequestMapping("{name}")
    public TestDTO testapi(HttpServletRequest request , HttpServletResponse response,
                           @PathVariable("name") String name) throws Exception{
        response.sendRedirect(request.getContextPath() + "/test/api/forward/" + name);

        return TestDTO.builder().id("1").name(name).build();
    }

    @RequestMapping("/forward/{name}")
    public TestDTO forwardTestApi(@PathVariable("name") String name){

        return TestDTO.builder().id("1").name(name).build();
    }

}

 API 를 호출해 보면 정상적으로 Filter가 작동하는것을 확인 할 수 있다.

2) GenericFilterBean를 상속 받아 구현. 

    1번에서 처럼 FilterRegistrationBean을 상속받아 하게 되면 Spring Bean을 사용할수 없게 되는데 아래처럼 하면 

@Autowired를 사용할수 있게 되고 Filter도 자동등록되게 된다.

@Slf4j
@Order(0)
@Component
public class OneFilter extends GenericFilterBean {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        log.info("One Filter ");
        chain.doFilter(request, response);
    }
}

 

여러 Filter를 등록하게 되면 Filter의 순서가 중요해 지는데 이때 Filter의 순서는 @Order Annotation으로 순서를 정할수 있다.

'Spring > Filter' 카테고리의 다른 글

2) Springboot OncePerRequestFilter 와 GenericFilterBean의 차이  (0) 2021.04.30