* HandlerInterceptor(인터셉터) 사용하기
- 스프링의 인터셉터는 URI 호출시 해당 요청의 컨트롤러가 처리 되기 전,후에 작업을 하기 위해 사용됨
- 필터와 인터셉터의 차이점
1) 필터는 dispatchServlet 앞단에서 동작
인터셉터는 dispatchServlet에서 핸들러 컨트롤러로 가기전에 동작
2) 필터는 J@EE 표준스펙의 서블릿 기능
인터셉터는 스프링에서 제공되는 기능으로 필터와 달리 인터셉터에서는 스프링 빈 사용가능
3) 필터는 문자열 인코딩같은 웹전반에서 사용기능 구현
인터셉터는 로그인,인증,권한 같이 클라이언트 요청과 관련 있는 기능 구현
1. HandlerInterceptorAdapter or HandlerInterceptor 로 인터셉터 구현하기
- 스프링에서 인터셉터는 HandlerInterceptorAdapter 클래스를 상속 받아 구현한다
- spring 5.3 이상 버전에서는 HandlerInterceptorAdapter 를 더이상 사용하지 않아 HandlerInterceptor사용한다.
/board/src/main/java/board/interceptor/LoggerInterceptor.java 파일 생성
package board.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class LoggerInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.debug("================preHandle==================");
log.debug("request uri : "+request.getRequestURI());
return HandlerInterceptor.super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.debug("================postHandle==================");
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
}
2. Interceptor 등록
/board/src/main/java/board/configuration/WebMvcConfiguration.java
- implements WebMvcConfigurer 해준다
WebMvcConfigurer는 inteface이다.
@EnableWebMvc를 통해 Spring MVC를 위한 커스터마이즈드된 java-based configuration을 정의한다.
기존 설정된 bean 설정을 유지하고, 기능을 단순히 추가할 때는 WebMvcConfigurer를 구현하고
@Configuration 을 추가한 클래스를 만들면 된다.
기존과 다르게 Spring MVC를 제어하려한다면 @EnableWebMvc를 추가하면 된다.
package board.configuration;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import board.interceptor.LoggerInterceptor;
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer{
//인터셉터 등록 addPathPatterns():요청주소의 패턴/excludePathPatterns():제외 주소의 패턴
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoggerInterceptor());
}
}
*** @EnableWebMvc 애노테이션과 WebMvcConfigurer 인터페이스 ***
- @EnableWebMvc - 설정이 완료된 여러 스프링 빈을 추가
- WebMvcConfigurer 인터페이스 - @EnableWebMvc로 자동 생성된 빈의 설정 값을 추가
https://pangtrue.tistory.com/84
참고)
'SpringBoot > (책)스프링부트 시작하기' 카테고리의 다른 글
[springboot] 8. 트랜잭션 적용하기 (0) | 2023.04.24 |
---|---|
[springboot] 7. AOP 사용하기 (0) | 2023.04.23 |
[springboot] 5-1. Log4JDBC로 쿼리 로그 정렬하기 (0) | 2023.04.23 |
[springboot] 5. springboot Logback 설정하기 (0) | 2023.04.23 |
[springboot] 3-3. springboot mybatis typeAliases 설정하기 (0) | 2023.04.23 |