인프런 커뮤니티 질문&답변

hyun님의 프로필 이미지
hyun

작성한 질문수

스프링 시큐리티

5) 웹 기반 인가처리 DB 연동 - FilterInvocationSecurityMetadataSource (2)

정적 파일들이 ignore 되지 않는 문제가 발생합니다..

작성

·

657

0

 

이번 강의에서

web.ignoring().requestMatchers(PathRequest.toStaticResources().atCommonLocations());

코드가 존재함에도  static 파일들이 ignore 되지 않는 문제가 발생합니다.

깃 파일과 비교하고, 강의 다시 보며 체크해봤는데도 도무지 원인을 찾지 못하겠습니다.

 

찾아주시면 정말 감사하겠습니다.

소스는 https://github.com/aittaa/corespringsecurity-authorize 입니다.

답변 1

4

정수원님의 프로필 이미지
정수원
지식공유자

네 

이 부분은 제가 강의 때 별도 설명을 하지 않은 부분인데 질문해 주셔서 감사합니다.

일반적으로 필터를 생성해서 등록하게 되면 필터타입의 모든 객체는 서블릿 컨테이너에 등록이 됩니다.

스프링 시큐리티에서 관리하는 필터는 내부적으로 서블릿 컨테이너에서 간섭하지 않도록 처리가 되어 있지만 우리가 별도로 생성한 필터는 그렇지 않다는 데 원인이 있습니다.

.and()
.addFilterAt(customFilterSecurityInterceptor(), FilterSecurityInterceptor.class);

위의 코드에서 customFilterSecurityInterceptor() 는 우리가 직접 생성한 필터이기 때문에 스프링 시큐리티에서 컨트롤하기도 하지만 여전히 서블릿에서도 자동으로 등록이 되는 필터이기도  합니다.

왜냐하면 Filter 인터페이스를 구현했기 때문입니다.

그렇기 때문에 스프링 시큐리티 내에서 기본적으로 생성한 필터에 대해서는 정적 무시가 정상적으로 동작 했지만 우리가 새롭게 생성한 필터는 여전히 서블릿 필터에서도 호출이 되는 필터이기 때문에 정적 파일을 무시하지 못하고 가로채어 버립니다.

그리서 결론은 아래와 같은 코드가 작성이 되어야 합니다

@Bean
public FilterRegistrationBean filterRegistrationBean() throws Exception {
FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
filterRegistrationBean.setFilter(customFilterSecurityInterceptor());
filterRegistrationBean.setEnabled(false);
return filterRegistrationBean;
}

물론 강의 소스에서 작성이 되어 있는데 hyun 님 소스에서 없어서 그렇습니다.

위의 코드는 우리가 생성해서 스프링 시큐리티에 추가한 필터를 서블릿 컨테이너에서는 사용하지 않도록 하는 설정입니다.

filterRegistrationBean.setEnabled(false);

위 코드를 추가하신 후 실행해 보시면 정상적으로 정적 파일을 무시하게 됩니다.

hyun님의 프로필 이미지
hyun

작성한 질문수

질문하기