[번역] 스프링 부트 필터를 정의하는 방법

in spring-boot •  3 years ago 

https://www.baeldung.com/spring-boot-add-filter/ 를 번역함.

 1. 개요

이 빠른 자습서에서는 Spring Boot를 사용하여 사용자 정의 필터를 정의하고 호출 순서를 지정하는 방법을 탐색합니다.

2. 필터 및 호출 순서 정의

두 개의 필터를 만드는 것으로 시작해 보겠습니다.

  1. TransactionFilter – 트랜잭션 시작 및 커밋
  2. RequestResponseLoggingFilter – 요청 및 응답 기록

필터를 생성하려면 Filter 인터페이스 를 구현하면 됩니다.

@Component
@Order(1)
public class TransactionFilter implements Filter {

@Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;
        LOG.info(
"Starting a transaction for req : {}",
req.getRequestURI());

        chain.doFilter(request, response);
        LOG.info(
"Committing a transaction for req : {}",
req.getRequestURI());
}

// other methods
}

@Component
@Order(2)
public class RequestResponseLoggingFilter implements Filter {

@Override
public void doFilter(
ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
LOG.info(
"Logging Request {} : {}", req.getMethod(),
req.getRequestURI());
chain.doFilter(request, response);
LOG.info(
"Logging Response :{}",
res.getContentType());
}

// other methods
}

Spring이 필터를 인식하기 위해서는 @Component 어노테이션이 있는 빈으로 정의해야 합니다 .

또한 필터가 올바른 순서로 실행되도록 하려면 @Order 주석 을 사용해야 합니다 .

2.1. URL 패턴으로 필터링

위의 예에서 필터는 기본적으로 애플리케이션의 모든 URL에 대해 등록됩니다. 그러나 때때로 필터가 특정 URL 패턴에만 적용되기를 원할 수 있습니다.

이 경우 필터 클래스 정의에서 @Component 주석 을 제거하고 FilterRegistrationBean을 사용하여 필터를 등록해야 합니다 .

@Bean
public FilterRegistrationBean<RequestResponseLoggingFilter> loggingFilter(){
FilterRegistrationBean<RequestResponseLoggingFilter> registrationBean
= new FilterRegistrationBean<>();

registrationBean.setFilter(new RequestResponseLoggingFilter());
registrationBean.addUrlPatterns("/users/*");

return registrationBean;
}

이제 필터는 /users/* 패턴 과 일치하는 경로에만 적용됩니다 .

필터에 대한 URL 패턴을 설정하려면 addUrlPatterns() 또는 setUrlPatterns() 메서드를 사용할 수 있습니다 .

3. 간단한 예

이제 간단한 끝점을 만들고 HTTP 요청을 보내 보겠습니다.

@RestController
@RequestMapping("/users")
public class UserController {

@GetMapping()
public List<User> getAllUsers() {
// ...
}
}

이 API를 적중할 때의 애플리케이션 로그는 다음과 같습니다.

23:54:38 INFO  com.spring.demo.TransactionFilter - Starting Transaction for req :/users
23:54:38 INFO c.s.d.RequestResponseLoggingFilter - Logging Request GET : /users
...
23:54:38 INFO c.s.d.RequestResponseLoggingFilter - Logging Response :application/json;charset=UTF-8
23:54:38 INFO com.spring.demo.TransactionFilter - Committing Transaction for req :/users

이렇게 하면 필터가 원하는 순서로 호출되는지 확인합니다.

4. 결론

이 간단한 기사에서는 Spring Boot 웹앱에서 사용자 정의 필터를 정의하는 방법을 요약했습니다.

항상 그렇듯이 코드 조각은 GitHub 에서 찾을 수 있습니다 .



Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!