Post

Spring Security - mvcMatchers vs antMatchers

개요

프로젝트 코드를 복기하던 중 이런 코드를봤다.

1
2
3
4
5
6
// TODO
// how diff antMatchers, mvcMatchers
@Bean
public WebSecurityCustomizer configure() throws Exception{
    return (web) -> web.ignoring().mvcMatchers("/h2-console/**");
}

mvcMatchers말고 antMatchers를 적어도 된다. 그 둘의 차이점이 궁금해졌다.

차이

antMatcher는 AntPattern을 사용하는 url을 말하기에 AntPattern에 대해 알아야한다.

AntPattern에서는 3가지 특수기호가 존재하고 이를 조합해서 url을 구성한 것을 말한다.

그렇다해서 mvcPattern이 이와같은 문법을 사용하지 않는다는 것은 아니다.

  • ? : 1개이상의 문자와 매칭
  • * : 0개 이상의 문자와 매칭
  • ** : 0개 이상의 경로 또는 파일과 매칭

AntPattern은 뒤에 슬래시(/)가 오면 인식을 못하는데 mvcPattern는 이를 감지한다.

더 나아가 /~.html, /~.xyz처럼 뒤에 파일명이 붙어도 인식한다.

그래서 설정해줄때 mvcMatchers가 좀 더 간편하게 조작이 가능하고, 보안적으로도 우수하다고 한다.

참고로 두 개 모두 이러한 문법의 형태도 허용한다. Controller에 해당 url에 @PathVariable이 적용되어있어야한다.

1
2
/api/user/{num}
/api/user/{*num} //매칭되어도되고 안 되어도됨.

문제를 발견했다. 위 두개가 동작방식이 달라서인지 필자가 작성한 코드에서 에러가 떴다. https://github.com/kkminseok/real-world-springboot/wiki/%F0%9F%91%8D%EA%B2%AA%EC%9D%80-%EB%AC%B8%EC%A0%9C에서 확인이 가능하고, 나름의 이유를 찾았다. 사실 내부동작이 달라서 나타나는 문제가 아닐수도 있다.

결론

결론적으로 mvcMatchers가 보안적으로 우수하고 유연하게 대처가 가능하다니 이것을 고려해보도록 하자.

여담

좀 더 깊게 찾아보고 싶었으나.. 회사 점심시간 30분동안 구글링해도 외의 내용을 찾기는 어려웠다.

엄청 깊게 가면 HandlerMappingIntrospector와 뭔가 관련이 있는것 같은데.. 영어의 한계를 느껴서 제대로 찾진 못했다. 궁금한사람은 위의 키워드로 Spring Security 내부동작에 대해 학습하고 나한테도 알려줬으면 좋겠다.

Reference

This post is licensed under CC BY 4.0 by the author.