본문 바로가기
프로젝트/SpringSecurity

[Spring Security] 11. JWT를 이용하기위한 filter 등록 테스트

by dantriss 2023. 7. 11.

유튜브에서 스프링시큐리티를 심화교육하면서 조금더 레벨업 하고자 한다.

IDE : IntelliJ

언어 : Java 8

스프링부트 버전 : 2.7.13

DB : MySQL

빌드관리 도구 : Maven

OS : iOS

참고유튜브 : 메타코딩


필터를 설정하면 어떤 순서로 진행이 되는지 확인해보자

filter 패키지 하위로 MyFilter1 클래스 생성

 

Filter를 오버라이딩해준다.

 

ctrl+o를 눌러서 doFilter를 오버라이딩

 

테스트를 진행하기 위해서 콘솔에 filter 1을 찍어보자

public class MyFilter1 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        System.out.println("filter 1");
        filterChain.doFilter(servletRequest, servletResponse);

    }
}

 

MyFilter1을 복사해서 MyFilter2를 생성

 

config 패키지 하위로 FilterConfig 생성 후 

 

@Configuration 어노테이션을 추가해서 의존성주입을 해주고

FilterRegistrationBean으로 각각 Myfilter 1과 2를 넣어준다.

bean.addUrlPatterns로 모든 패턴에대해 접근을 허용하고

bean.setOrder로 필터가 실행되는 순서를 정해준다.

@Configuration
public class FilterConfig {


    @Bean
    public FilterRegistrationBean<MyFilter1> filter1(){
        FilterRegistrationBean<MyFilter1> bean = new FilterRegistrationBean<>(new MyFilter1());
        bean.addUrlPatterns("/*");
        bean.setOrder(1);           //낮은 번호가 필터중에서 가장 먼저 실행됨
        return bean;

    }
    @Bean
    public FilterRegistrationBean<MyFilter2> filter2(){
        FilterRegistrationBean<MyFilter2> bean = new FilterRegistrationBean<>(new MyFilter2());
        bean.addUrlPatterns("/*");
        bean.setOrder(2);           //낮은 번호가 필터중에서 가장 먼저 실행됨
        return bean;

    }

}

 

설정한대로 filter 1이 먼저 실행되고 filter 2가 나중에 실행되게 된다.

 

그렇다면 SecurityConfig에서 필터를 넣었을때는 어떠한 순서대로 동작을 하게 되는것일까?

MyFilter1을 복사해서 MyFilter3를 만들어준 후

 

SecurityConfig에 아래와 같이 추가해준다.

http.addFilterBefore(new MyFilter3(), BasicAuthenticationFilter.class);

 

그 후 서버를 실행해서 확인해보면 시큐리티 필터가 먼저 거쳐진 후에 순서에 맞게 출력이 되는것 을 확인할 수 있다. 

댓글