• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

인터셉터 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

답변을 작성해보세요.

1

안녕하세요. Alpha님

이 부분은 스프링 부트 WebMvcAutoConfiguration에서 애플리케이션 실행 시점에 직접 호출해줍니다.

감사합니다.