강의

멘토링

로드맵

Inflearn Community Q&A

No author

This post's author information has been deleted.

Spring MVC Part 2 - Backend Web Development Application Techniques

Spring Interceptor - Authentication Check

인터셉터 addInterceptors 가 어디서 호출이 되는건가요?

Written on

·

512

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 로 찾아다니는거만 생각하다보니까 이해가 잘안되네요

 

 

springmvcMVC

Quiz

웹 요청이 들어왔을 때, 서블릿 필터와 스프링 인터셉터는 처리 흐름 중 어디에 위치하나요?

WAS -> 필터 -> DispatcherServlet -> 인터셉터 -> 컨트롤러

WAS -> 인터셉터 -> 필터 -> DispatcherServlet -> 컨트롤러

WAS -> DispatcherServlet -> 필터 -> 인터셉터 -> 컨트롤러

WAS -> DispatcherServlet -> 인터셉터 -> 컨트롤러 -> 필터

Answer 1

1

yh님의 프로필 이미지
yh
Instructor

안녕하세요. Alpha님

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

감사합니다.

No author

This post's author information has been deleted.

Ask a question