스프링 시큐리티를 적용하기 위해 의존을 추가하고 실행했더니 이런 창이 자동으로 나왔다. 난 의존에 스프링 시큐리티를 추가한 것 말고 아무것도 한게 없는데, 어떻게 이런 동작이 가능한가 궁금해 공부해봤다.

스프링 시큐리티 초기 화면

스프링 시큐리티 초기 화면

스프링 시큐리티 아키텍쳐

스프링 시큐리티는 서블릿 필터를 기반으로 한다고 한다.

Screenshot 2024-04-15 at 17.15.40.png

서블릿, 웹서버, WAS

서블릿 필터는 서블릿으로 들어가는 요청에 수행할 공통적인 작업을 수행하기 위한 컴포넌트다. 이러한 필터가 모인게 필터 체인이다.

우선 서플릿 필터가 어떻게 동작하는지부터 알아봐야 했다.

서블릿 필터 테스트

서블릿 필터는 Filter 인터페이스를 구현해 사용할 수 있다.

Filter 인터페이스

Filter 인터페이스

Filter 인터페이스를 구현한 서블릿 필터

@Component
public class TestFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("TestFilter.init");
        Filter.super.init(filterConfig);

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("before test filter1");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("after test filter1");
    }

    @Override
    public void destroy() {
        System.out.println("TestFilter.destroy");
        Filter.super.destroy();
    }
}