다시 웹, 백엔드로/스프링

Spring Boot Filter 와 Interceptor

EnoughTT 2024. 6. 8. 17:04

Spring Boot Filter 와 Interceptor

 

 

Filter

  • Web Application에서 관리되는 영역으로써 Spring Boot Framework 에서 Client 로 부터오는 요청 / 응답에 대해 최초 / 최종 단계의 위치에 존재
  • 요청/응답의 정보를 변경하거나 Spring에 의해서 데이터가 변환되기 전의 순수한 Client 의 요청 / 응답 값 확인 가능
  • 유일하게 ServletRequest, ServletResponse 의 객체 변환
  • Spring Framework 에서는 request / response 의 Logging 용도로 활용하거나 인증 관련된 Logic 들을 해당 Filter 에서 처리
  • 선 / 후 처리함으로써 Service business logic 과 분리 시킴

 

 

 

 

 

Interceptor

  • Filter와 매우 유사한 형태
  • Spring Context에 등록됨
  • AOP와 유사한 기능을 제공
  • 인증 단계를 처리하거나, Logging 을 할때 사용
  • 선 / 후 처리함으로써 Service business logic 과 분리 시킴

 

 

 

 

 

Life Cycle

Filter ➡️ Interceptor ➡️ AOP

 

 

 

 

예제

* Lombok

  • Java 에서 주로 사용하는 라이브러리
  • Getter / Setter / toString() 등 어노테이션으로 작성 가능

 

- Filter

User.java

 

ApiController.java

 

-- 라인을 읽음
url: /api/user, Line: {
url: /api/user, Line: "name": "enough",
url: /api/user, Line: "age": 10
url: /api/user, Line: }


-- 읽을 라인이 없음
java.lang.IllegalStateException: getReader() has already been called for this request



// corsor 자체가 라인 제일 끝으로 이동됨
String url = httpServletRequest.getRequestURI();
BufferedReader bufferedReader = httpServletRequest.getReader();
bufferedReader.lines().forEach(line -> {
    log.info("url: {}, Line: {}", url, line);
});

// read를 한번 해버리면 클라이언트에서 요청이 오는 것에 대한 내용을 더 이상 읽을 수 없음
public User user(@RequestBody User user) {
    log.info("User: {}", user);

    return user;
}

 

GlobalFilter.java

 

FilterApplication.java

 

ApiUserController.java

 

 

 

 

 

- Interceptor

PrivateController.java

 

PublicController.java

 

Auth.java

 

AuthInterceptor.java

 

MvcConfig.java

 

AuthException.java

 

GlobalExceptionHandler.java

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

feat. 패스트캠퍼스 - Java/Spring 웹 개발 마스터 초격차

'다시 웹, 백엔드로 > 스프링' 카테고리의 다른 글

Server(Client) to Server 연결  (0) 2024.06.11
비동기 처리하기  (0) 2024.06.08
Spring Boot Validation 사례  (0) 2024.06.08
Spring Boot Exception  (0) 2024.06.07
Spring Boot Custom Validation  (0) 2024.06.06