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
-- 라인을 읽음
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;
}
- Interceptor
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 |