-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
인터셉터 addInterceptors 가 어디서 호출이 되는건가요?
23.02.14 21:30 작성 조회수 395
0
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)네
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)
네
[질문 내용]
여기에 질문 내용을 남겨주세요.
package hello.login;
import hello.login.web.argumentresolver.LoginMemberArgumentResolver;
import hello.login.web.filter.LogFilter;
import hello.login.web.filter.LoginCheckFilter;
import hello.login.web.interceptor.LogInterceptor;
import hello.login.web.interceptor.LoginCheckInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.servlet.Filter;
import java.util.List;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
resolvers.add(new LoginMemberArgumentResolver());
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LogInterceptor())
.order(1)
.addPathPatterns("/**")
.excludePathPatterns("/css/**", "/*.ico", "/error");
registry.addInterceptor(new LoginCheckInterceptor())
.order(2)
.addPathPatterns("/**")
.excludePathPatterns("/", "/members/add", "/login", "/logout",
"/css/**", "/*.ico", "/error");
}
// @Bean
public FilterRegistrationBean logFilter() {
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new LogFilter());
filterRegistrationBean.setOrder(1);
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
// @Bean
public FilterRegistrationBean loginCheckFilter() {
FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
filterRegistrationBean.setFilter(new LoginCheckFilter());
filterRegistrationBean.setOrder(2);
filterRegistrationBean.addUrlPatterns("/*");
return filterRegistrationBean;
}
}
Configuration 이 Component이고 ComponentScan 대상이어서 빈으로 등록 된다고 이해하고있었는데
@Configuration 이 달려있고 WebMvcConfigurer 상속 받는 상태에서 addInterceptors 메소드를 오버라이드 해주기만 하면 서버구동시 컴파일 과정에서 스캔을하다 @Override addInterceptors 메소드가 있으면 내부적으로 조건에 맞을시 매 uri 호출마다 addInterceptors 를 자동으로 호출하는건가요?
따로 맵핑되어서 uri 같은걸로 호출되는것도 아닌것같은데 어디서 호출이 되는건가요?
.addPathPatterns("/**")
.excludePathPatterns("/css/**", "/*.ico", "/error");
이부분은 이해가 가는데
여태 맵핑된 uri 로 찾아다니는거만 생각하다보니까 이해가 잘안되네요
답변을 작성해보세요.
1
김영한
지식공유자2023.02.18
안녕하세요. Alpha님
이 부분은 스프링 부트 WebMvcAutoConfiguration에서 애플리케이션 실행 시점에 직접 호출해줍니다.
감사합니다.
답변 1